60806040526000600c553480156200001657600080fd5b50620000296301ffc9a760e01b62000265565b600180546001600160a01b0319163317908190556040516001600160a01b0391909116906000907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36040805180820190915260108082526f141bdb1ad84810da5d1e48105cdcd95d60821b6020909201918252620000ae91600d9162000348565b506040805180820190915260038082526250434160e81b6020909201918252620000db91600e9162000348565b5060408051808201909152601f8082527f68747470733a2f2f706f6c6b61636974792e6170702f6e667461737365742f0060209092019182526200012291600f9162000348565b506200013560016103e86105dc620002c0565b6200014760026102ee610bb8620002c0565b6200015960036101f4611d4c620002c0565b6200016b600461012c612710620002c0565b6200017c600560c8613a98620002c0565b6200018e60066032620124f8620002c0565b6200019f6007603261ffdc620002c0565b620001b060086032619c40620002c0565b620001c26009603262015f90620002c0565b620001d3600a603261d6d8620002c0565b620001e5600b603262019a28620002c0565b620001f6600c603261c350620002c0565b62000207600d60326157e4620002c0565b62000218600e6032617530620002c0565b62000229600f603261afc8620002c0565b6200023b6380ac58cd60e01b62000265565b6200024d635b5e139f60e01b62000265565b6200025f63780e9d6360e01b62000265565b6200048e565b6001600160e01b031980821614156200029b5760405162461bcd60e51b81526004016200029290620003ee565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001600160401b03838116600090815260096020526040902080546001600160401b03191691841691909117600160401b600160801b03191690556200030f81670de0b6b3a764000062000425565b6001600160401b03909316600090815260096020526040902080546001600160801b03948516600160801b029416939093179092555050565b828054620003569062000451565b90600052602060002090601f0160209004810192826200037a5760008555620003c5565b82601f106200039557805160ff1916838001178555620003c5565b82800160010185558215620003c5579182015b82811115620003c5578251825591602001919060010190620003a8565b50620003d3929150620003d7565b5090565b5b80821115620003d35760008155600101620003d8565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b60008160001904831182151516156200044c57634e487b7160e01b81526011600452602481fd5b500290565b6002810460018216806200046657607f821691505b602082108114156200048857634e487b7160e01b600052602260045260246000fd5b50919050565b6121c0806200049e6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f578063bf56ee26116100a2578063cea93fc311610071578063cea93fc3146103fd578063cf456ae714610405578063e985e9c514610418578063f46eccc41461042b576101e5565b8063bf56ee26146103ab578063c1d022cf146103b3578063c1e03728146103c6578063c87b56dd146103ea576101e5565b8063a1cfb5ed116100de578063a1cfb5ed1461035f578063a22cb46514610372578063a6f9dae114610385578063b88d4fde14610398576101e5565b806370a08231146103295780637763605e1461033c578063893d20e81461034f57806395d89b4114610357576101e5565b806323b872dd116101875780634f6ccce7116101565780634f6ccce7146102e857806355f804b3146102fb5780636352211e1461030e5780636c0360eb14610321576101e5565b806323b872dd1461029c57806326db80e9146102af5780632f745c59146102c257806342842e0e146102d5576101e5565b8063095ea7b3116101c3578063095ea7b3146102485780630c4192cf1461025d5780631703b06c1461027257806318160ddd14610294576101e5565b806301ffc9a7146101ea57806306fdde0314610213578063081812fc14610228575b600080fd5b6101fd6101f8366004611950565b61043e565b60405161020a9190611abf565b60405180910390f35b61021b610461565b60405161020a9190611aca565b61023b6102363660046119cd565b6104f3565b60405161020a9190611a6e565b61025b6102563660046118e5565b61053f565b005b6102656105c5565b60405161020a9190611fd5565b6102856102803660046119cd565b6105cb565b60405161020a93929190611fde565b610265610604565b61025b6102aa3660046117f8565b610615565b61025b6102bd3660046119e5565b610646565b6102656102d03660046118e5565b6106c1565b61025b6102e33660046117f8565b6106ec565b6102656102f63660046119cd565b610707565b61025b610309366004611988565b61071d565b61023b61031c3660046119cd565b61075e565b61021b610786565b6102656103373660046117ac565b610795565b6101fd61034a36600461190e565b6107de565b61023b610988565b61021b610997565b61025b61036d3660046119cd565b6109a6565b61025b6103803660046118ab565b6109e9565b61025b6103933660046117ac565b610a81565b61025b6103a6366004611833565b610b07565b61023b610b3f565b61025b6103c13660046117ac565b610b4e565b6103d96103d43660046119cd565b610b9a565b60405161020a959493929190611f9f565b61021b6103f83660046119cd565b610be5565b61023b610c5f565b61025b6104133660046118ab565b610c6e565b6101fd6104263660046117c6565b610cc3565b6101fd6104393660046117ac565b610cf1565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b6060600d8054610470906120c6565b80601f016020809104026020016040519081016040528092919081815260200182805461049c906120c6565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82610d06565b6105235760405162461bcd60e51b815260040161051a90611e04565b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b600061054a8261075e565b9050806001600160a01b0316836001600160a01b0316141561057e5760405162461bcd60e51b815260040161051a90611f0d565b336001600160a01b038216148061059a575061059a8133610cc3565b6105b65760405162461bcd60e51b815260040161051a90611ce6565b6105c08383610d13565b505050565b600c5481565b6009602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b60006106106005610d81565b905090565b61061f3382610d8c565b61063b5760405162461bcd60e51b815260040161051a90611f4e565b6105c0838383610e11565b6001546001600160a01b031633146106705760405162461bcd60e51b815260040161051a90611bf2565b6000826001600160401b03161180156106895750600081115b61069257600080fd5b6001600160401b03808416600090815260096020526040902054166106b657600080fd5b6105c0838383610f5f565b6001600160a01b03821660009081526004602052604081206106e39083610fec565b90505b92915050565b6105c083838360405180602001604052806000815250610b07565b600080610715600584610ff8565b509392505050565b6001546001600160a01b031633146107475760405162461bcd60e51b815260040161051a90611bf2565b805161075a90600f90602084019061165c565b5050565b60006106e6826040518060600160405280602981526020016121626029913960059190611014565b6060600f8054610470906120c6565b60006001600160a01b0382166107bd5760405162461bcd60e51b815260040161051a90611d43565b6001600160a01b03821660009081526004602052604090206106e690610d81565b3360009081526002602052604081205460ff1615156001146108125760405162461bcd60e51b815260040161051a90611e50565b63ffffffff83166000908152600960205260409020546001600160401b03600160401b820481169116116108585760405162461bcd60e51b815260040161051a90611b1f565b60006108646010611021565b90506108708582611025565b6000818152600a60209081526040808320805463ffffffff60c01b1916600160c01b63ffffffff8a8116918202929092178084559086526009909452919093208054600160801b908190046001600160801b03166fffffffffffffffffffffffffffffffff199094169390931763ffffffff60801b19164283169384021763ffffffff60a01b1916600160a01b93909302929092176001600160e01b0316600160e01b9187169190910217909155805460019190600890610942908490600160401b90046001600160401b0316612022565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061097060106110e9565b61097b8560016110f2565b60019150505b9392505050565b6001546001600160a01b031690565b6060600e8054610470906120c6565b6003546001600160a01b031633146109bd57600080fd5b6000908152600a60205260409020805463ffffffff60a01b1916600160a01b4263ffffffff1602179055565b6001600160a01b038216331415610a125760405162461bcd60e51b815260040161051a90611c63565b3360008181526008602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610a75908590611abf565b60405180910390a35050565b6001546001600160a01b03163314610aab5760405162461bcd60e51b815260040161051a90611bf2565b6001546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b610b113383610d8c565b610b2d5760405162461bcd60e51b815260040161051a90611f4e565b610b3984848484611167565b50505050565b600b546001600160a01b031681565b6001546001600160a01b03163314610b785760405162461bcd60e51b815260040161051a90611bf2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600a60205260409020546001600160801b0381169163ffffffff600160c01b8304811692600160e01b8104821692600160801b8204831692600160a01b90920490911690565b6060610bf082610d06565b610c0c5760405162461bcd60e51b815260040161051a90611ebe565b6000610c16610786565b6000848152600a6020908152604091829020549151929350610c48928492600160e01b900463ffffffff169101611a3c565b604051602081830303815290604052915050919050565b6003546001600160a01b031681565b6001546001600160a01b03163314610c985760405162461bcd60e51b815260040161051a90611bf2565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b60026020526000908152604090205460ff1681565b60006106e660058361119a565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d488261075e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006106e682611021565b6000610d9782610d06565b610db35760405162461bcd60e51b815260040161051a90611c9a565b6000610dbe8361075e565b9050806001600160a01b0316846001600160a01b03161480610df95750836001600160a01b0316610dee846104f3565b6001600160a01b0316145b80610e095750610e098185610cc3565b949350505050565b826001600160a01b0316610e248261075e565b6001600160a01b031614610e4a5760405162461bcd60e51b815260040161051a90611e75565b6001600160a01b038216610e705760405162461bcd60e51b815260040161051a90611c1f565b610e7b8383836105c0565b610e86600082610d13565b6001600160a01b0383166000908152600460205260409020610ea890826111a6565b506001600160a01b0382166000908152600460205260409020610ecb90826111b2565b50610ed8600582846111be565b506000818152600a60205260409020805463ffffffff60801b1916600160801b4263ffffffff1602179055610f0e8260016110f2565b610f198360006110f2565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160401b038381166000908152600960205260409020805467ffffffffffffffff1916918416919091176fffffffffffffffff000000000000000019169055610fb381670de0b6b3a764000061204d565b6001600160401b03909316600090815260096020526040902080546001600160801b03948516600160801b029416939093179092555050565b60006106e383836111d4565b6000808080611007868661122d565b9097909650945050505050565b6000610e0984848461129d565b5490565b6001600160a01b03821661104b5760405162461bcd60e51b815260040161051a90611dcf565b61105481610d06565b156110715760405162461bcd60e51b815260040161051a90611bbb565b61107d600083836105c0565b6001600160a01b038216600090815260046020526040902061109f90826111b2565b506110ac600582846111be565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6001600160a01b038216600090815260046020526040812061111390610d81565b9050801561114d57600182151514801561112d5750806001145b1561114857600c805490600061114283612101565b91905055505b6105c0565b600c805490600061115d836120af565b9190505550505050565b611172848484610e11565b61117e84848484611314565b610b395760405162461bcd60e51b815260040161051a90611b69565b60006106e38383611428565b60006106e38383611440565b60006106e3838361155d565b6000610e0984846001600160a01b0385166115a7565b815460009082106111f75760405162461bcd60e51b815260040161051a90611add565b82600001828154811061121a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b8154600090819083106112525760405162461bcd60e51b815260040161051a90611d8d565b600084600001848154811061127757634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816112cd5760405162461bcd60e51b815260040161051a9190611aca565b50846112da60018361206c565b815481106112f857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101549150509392505050565b6000611328846001600160a01b0316611656565b1561141d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061135f903390899088908890600401611a82565b602060405180830381600087803b15801561137957600080fd5b505af19250505080156113a9575060408051601f3d908101601f191682019092526113a69181019061196c565b60015b611403573d8080156113d7576040519150601f19603f3d011682016040523d82523d6000602084013e6113dc565b606091505b5080516113fb5760405162461bcd60e51b815260040161051a90611b69565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e09565b506001949350505050565b60009081526001919091016020526040902054151590565b6000818152600183016020526040812054801561155357600061146460018361206c565b85549091506000906114789060019061206c565b9050600086600001828154811061149f57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106114d057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001556114e783600161200a565b6000828152600189016020526040902055865487908061151757634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106e6565b60009150506106e6565b60006115698383611428565b61159f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106e6565b5060006106e6565b60008281526001840160205260408120548061160c575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055610981565b828561161960018461206c565b8154811061163757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050610981565b3b151590565b828054611668906120c6565b90600052602060002090601f01602090048101928261168a57600085556116d0565b82601f106116a357805160ff19168380011785556116d0565b828001600101855582156116d0579182015b828111156116d05782518255916020019190600101906116b5565b506116dc9291506116e0565b5090565b5b808211156116dc57600081556001016116e1565b60006001600160401b038084111561170f5761170f612132565b604051601f8501601f19908116603f0116810190828211818310171561173757611737612132565b8160405280935085815286868601111561175057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461045c57600080fd5b803563ffffffff8116811461045c57600080fd5b80356001600160401b038116811461045c57600080fd5b6000602082840312156117bd578081fd5b6106e38261176a565b600080604083850312156117d8578081fd5b6117e18361176a565b91506117ef6020840161176a565b90509250929050565b60008060006060848603121561180c578081fd5b6118158461176a565b92506118236020850161176a565b9150604084013590509250925092565b60008060008060808587031215611848578081fd5b6118518561176a565b935061185f6020860161176a565b92506040850135915060608501356001600160401b03811115611880578182fd5b8501601f81018713611890578182fd5b61189f878235602084016116f5565b91505092959194509250565b600080604083850312156118bd578182fd5b6118c68361176a565b9150602083013580151581146118da578182fd5b809150509250929050565b600080604083850312156118f7578182fd5b6119008361176a565b946020939093013593505050565b600080600060608486031215611922578283fd5b61192b8461176a565b925061193960208501611781565b915061194760408501611781565b90509250925092565b600060208284031215611961578081fd5b813561098181612148565b60006020828403121561197d578081fd5b815161098181612148565b600060208284031215611999578081fd5b81356001600160401b038111156119ae578182fd5b8201601f810184136119be578182fd5b610e09848235602084016116f5565b6000602082840312156119de578081fd5b5035919050565b6000806000606084860312156119f9578283fd5b611a0284611795565b925061182360208501611795565b60008151808452611a28816020860160208601612083565b601f01601f19169290920160200192915050565b60008351611a4e818460208801612083565b60e09390931b6001600160e01b0319169190920190815260040192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611ab590830184611a10565b9695505050505050565b901515815260200190565b6000602082526106e36020830184611a10565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252602a908201527f4d6178206d696e7461626c6520616d6f756e74207265616368656420666f72206040820152691d1a1a5cc8185cdcd95d60b21b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526022908201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6001600160801b0395909516855263ffffffff938416602086015291831660408501528216606084015216608082015260a00190565b90815260200190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b6000821982111561201d5761201d61211c565b500190565b60006001600160401b038083168185168083038211156120445761204461211c565b01949350505050565b60008160001904831182151516156120675761206761211c565b500290565b60008282101561207e5761207e61211c565b500390565b60005b8381101561209e578181015183820152602001612086565b83811115610b395750506000910152565b6000816120be576120be61211c565b506000190190565b6002810460018216806120da57607f821691505b602082108114156120fb57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121155761211561211c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461215e57600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea264697066735822122054bcd47d6c9899df488d650be4b50cc6bee27c43dbf8e09eff5373316005937a64736f6c63430008010033