0x608060405260015f55348015610013575f80fd5b506040516121e63803806121e683398101604081905261003291610164565b8082336040518060400160405280600a81526020016950657473204f6173697360b01b81525060405180604001604052806002815260200161504f60f01b81525081600590816100829190610253565b50600661008f8282610253565b5050600780546001600160a01b0319166001600160a01b039390931692909217909155506100bd82826100ef565b5050826009819055506100e760405180608001604052806059815260200161218d60599139610154565b50505061030d565b612710816001600160601b0316111561011b57604051635b75946560e11b815260040160405180910390fd5b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600855565b60046101608282610253565b5050565b5f805f60608486031215610176575f80fd5b835160208501519093506001600160601b0381168114610194575f80fd5b60408501519092506001600160a01b03811681146101b0575f80fd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101e357607f821691505b60208210810361020157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561024e57805f5260205f20601f840160051c8101602085101561022c5750805b601f840160051c820191505b8181101561024b575f8155600101610238565b50505b505050565b81516001600160401b0381111561026c5761026c6101bb565b6102808161027a84546101cf565b84610207565b6020601f8211600181146102b2575f831561029b5750848201515b5f19600385901b1c1916600184901b17845561024b565b5f84815260208120601f198516915b828110156102e157878501518255602094850194600190920191016102c1565b50848210156102fe57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b611e738061031a5f395ff3fe608060405234801561000f575f80fd5b506004361061018f575f3560e01c80636352211e116100dd578063a22cb46511610088578063cd3293de11610063578063cd3293de1461035e578063e985e9c514610367578063f2fde38b146103a2575f80fd5b8063a22cb46514610325578063b88d4fde14610338578063c87b56dd1461034b575f80fd5b80638da5cb5b116100b85780638da5cb5b146102f957806395d89b411461030a578063a0bcfc7f14610312575f80fd5b80636352211e146102c057806367243482146102d357806370a08231146102e6575f80fd5b806323b872dd1161013d57806342842e0e1161011857806342842e0e146102915780634f6ccce7146102a45780635f97036f146102b7575f80fd5b806323b872dd146102395780632a55205a1461024c5780632f745c591461027e575f80fd5b8063081812fc1161016d578063081812fc146101e5578063095ea7b31461021057806318160ddd14610223575f80fd5b806301ffc9a71461019357806302fa7c47146101bb57806306fdde03146101d0575b5f80fd5b6101a66101a136600461165d565b6103b5565b60405190151581526020015b60405180910390f35b6101ce6101c936600461169a565b61057d565b005b6101d86105de565b6040516101b2919061170d565b6101f86101f336600461171f565b61066e565b6040516001600160a01b0390911681526020016101b2565b6101ce61021e366004611736565b6106cf565b61022b610805565b6040519081526020016101b2565b6101ce61024736600461175e565b610819565b61025f61025a366004611798565b610902565b604080516001600160a01b0390931683526020830191909152016101b2565b61022b61028c366004611736565b6109c7565b6101ce61029f36600461175e565b610ac5565b61022b6102b236600461171f565b610ae4565b61022b61271081565b6101f86102ce36600461171f565b610b36565b6101ce6102e13660046118a3565b610be7565b61022b6102f4366004611966565b610d3b565b6007546001600160a01b03166101f8565b6101d8610df5565b6101ce6103203660046119d8565b610e04565b6101ce610333366004611a1d565b610e63565b6101ce610346366004611a4b565b610f2e565b6101d861035936600461171f565b610f7b565b61022b60095481565b6101a6610375366004611ac2565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b6101ce6103b0366004611966565b610ff0565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061044757507fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000145b8061049357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104df57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7f5828d000000000000000000000000000000000000000000000000000000000145b8061052b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061057757507fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000145b92915050565b336105906007546001600160a01b031690565b6001600160a01b0316146105d0576040517f4eec1aa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105da82826110ac565b5050565b6060600580546105ed90611af3565b80601f016020809104026020016040519081016040528092919081815260200182805461061990611af3565b80156106645780601f1061063b57610100808354040283529160200191610664565b820191905f5260205f20905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b5f8161067981611145565b6106af576040517f89a111e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600160205260409020546001600160a01b031691505b50919050565b5f6106d982610b36565b9050806001600160a01b0316836001600160a01b031603610726576040517f47f5cd4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f8181526002602090815260408083203380855292529091205460ff16911480159061075a575080155b15610791576040517fbdc31d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8381526001602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388811691821790925591518693918616917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b5f60015f546108149190611b6b565b905090565b6001600160a01b038216610859576040517f86292b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61086382610b36565b9050806001600160a01b0316846001600160a01b0316146108b0576040517fa4b5692700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108bb81338461115b565b6108f1576040517fbdc31d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108fc8484846111cc565b50505050565b604080518082019091526008546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525f908190831580610967575060208101516bffffffffffffffffffffffff16155b8061097a575080516001600160a01b0316155b1561098b575f8092509250506109c0565b5f6127108583602001516bffffffffffffffffffffffff166109ad9190611b7e565b6109b79190611b95565b91519350909150505b9250929050565b5f6001600160a01b038316610a08576040517fa4b5692700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001815b5f54821015610a9357610a1f82611145565b15610a88575f828152600360205260409020546001600160a01b031615610a5a575f828152600360205260409020546001600160a01b031692505b826001600160a01b0316866001600160a01b031603610a8857808503610a84575091506105779050565b6001015b816001019150610a0d565b6040517f8adbcb8100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610adf83838360405180602001604052805f815250610f2e565b505050565b5f60015f54610af39190611b6b565b8210610b2b576040517fa8111f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610577826001611bcd565b5f81610b4181611145565b610b77576040517f89a111e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600360205260409020546001600160a01b03169150825b6001600160a01b038316610be0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015f818152600360205260409020546001600160a01b03169250610b92565b5050919050565b33610bfa6007546001600160a01b031690565b6001600160a01b031614610c3a576040517f4eec1aa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815181518114610c76576040517f88adebd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805b82821015610cef57838281518110610c9357610c93611be0565b602002602001015181610ca69190611bcd565b9050610ce4858381518110610cbd57610cbd611be0565b6020026020010151858481518110610cd757610cd7611be0565b602002602001015161138c565b816001019150610c79565b600954811115610d2b576040517f6a52283100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805491909103905550505050565b5f6001600160a01b038216610d7c576040517fa4b5692700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015b5f54811015610be057610d9281611145565b15610ded575f818152600360205260409020546001600160a01b031615610dcd575f818152600360205260409020546001600160a01b031691505b816001600160a01b0316846001600160a01b031603610ded578260010192505b600101610d80565b6060600680546105ed90611af3565b33610e176007546001600160a01b031690565b6001600160a01b031614610e57576040517f4eec1aa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6081611485565b50565b336001600160a01b03831603610ea5576040517f47f5cd4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f8181526002602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f39848484610819565b610f4584848484611491565b6108fc576040517f86292b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081610f8781611145565b610fbd576040517f89a111e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004610fc8846115ed565b604051602001610fd9929190611c0d565b604051602081830303815290604052915050919050565b336110036007546001600160a01b031690565b6001600160a01b031614611043576040517f4eec1aa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b612710816bffffffffffffffffffffffff1611156110f6576040517fb6eb28ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600855565b5f815f0361115457505f919050565b505f541190565b5f836001600160a01b0316836001600160a01b0316148061119557506111808261066e565b6001600160a01b0316836001600160a01b0316145b806111c457506001600160a01b038085165f9081526002602090815260408083209387168352929052205460ff165b949350505050565b5f818152600160208190526040822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055821161120e576001611219565b611219600183611b6b565b90505f611227836001611bcd565b90505f838310801561123d575061123d83611145565b801561125d57505f838152600360205260409020546001600160a01b0316155b90505f61126983611145565b801561128957505f838152600360205260409020546001600160a01b0316155b905081156112d0575f84815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790555b8015611315575f83815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790555b5f8581526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a811691821790925591518893918b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050505050565b5f80549061139a8383611bcd565b90505f6113a8600183611b6b565b5f84815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03881617905590508281111561142f575f81815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387161790555b5f8290555b8183101561147e5760405183906001600160a01b038716905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4826001019250611434565b5050505050565b60046105da8282611d12565b5f833b80156115e1576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063150b7a02906114e59033908a9089908990600401611e0b565b6020604051808303815f875af192505050801561151f575060408051601f3d908101601f1916820190925261151c91810190611e4b565b60015b611594573d80801561154c576040519150601f19603f3d011682016040523d82523d5f602084013e611551565b606091505b5080515f0361158c576040517f86292b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001491506111c49050565b50600195945050505050565b606060a06040510180604052602081039150505f815280825b600183039250600a81066030018353600a9004806116065750819003601f19909101908152919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e60575f80fd5b5f6020828403121561166d575f80fd5b813561167881611630565b9392505050565b80356001600160a01b0381168114611695575f80fd5b919050565b5f80604083850312156116ab575f80fd5b6116b48361167f565b915060208301356bffffffffffffffffffffffff811681146116d4575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61167860208301846116df565b5f6020828403121561172f575f80fd5b5035919050565b5f8060408385031215611747575f80fd5b6117508361167f565b946020939093013593505050565b5f805f60608486031215611770575f80fd5b6117798461167f565b92506117876020850161167f565b929592945050506040919091013590565b5f80604083850312156117a9575f80fd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561180e5761180e6117b8565b604052919050565b5f67ffffffffffffffff82111561182f5761182f6117b8565b5060051b60200190565b5f82601f830112611848575f80fd5b813561185b61185682611816565b6117e5565b8082825260208201915060208360051b86010192508583111561187c575f80fd5b602085015b83811015611899578035835260209283019201611881565b5095945050505050565b5f80604083850312156118b4575f80fd5b823567ffffffffffffffff8111156118ca575f80fd5b8301601f810185136118da575f80fd5b80356118e861185682611816565b8082825260208201915060208360051b850101925087831115611909575f80fd5b6020840193505b82841015611932576119218461167f565b825260209384019390910190611910565b9450505050602083013567ffffffffffffffff811115611950575f80fd5b61195c85828601611839565b9150509250929050565b5f60208284031215611976575f80fd5b6116788261167f565b5f8067ffffffffffffffff841115611999576119996117b8565b50601f8301601f19166020016119ae816117e5565b9150508281528383830111156119c2575f80fd5b828260208301375f602084830101529392505050565b5f602082840312156119e8575f80fd5b813567ffffffffffffffff8111156119fe575f80fd5b8201601f81018413611a0e575f80fd5b6111c48482356020840161197f565b5f8060408385031215611a2e575f80fd5b611a378361167f565b9150602083013580151581146116d4575f80fd5b5f805f8060808587031215611a5e575f80fd5b611a678561167f565b9350611a756020860161167f565b925060408501359150606085013567ffffffffffffffff811115611a97575f80fd5b8501601f81018713611aa7575f80fd5b611ab68782356020840161197f565b91505092959194509250565b5f8060408385031215611ad3575f80fd5b611adc8361167f565b9150611aea6020840161167f565b90509250929050565b600181811c90821680611b0757607f821691505b6020821081036106c9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561057757610577611b3e565b808202811582820484141761057757610577611b3e565b5f82611bc8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b8082018082111561057757610577611b3e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f808454611c1a81611af3565b600182168015611c315760018114611c6457611c91565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168652811515820286019350611c91565b875f5260205f205f5b83811015611c8957815488820152600190910190602001611c6d565b505081860193505b50505083518060208601835e7f2e706e67000000000000000000000000000000000000000000000000000000009101908152600401949350505050565b601f821115610adf57805f5260205f20601f840160051c81016020851015611cf35750805b601f840160051c820191505b8181101561147e575f8155600101611cff565b815167ffffffffffffffff811115611d2c57611d2c6117b8565b611d4081611d3a8454611af3565b84611cce565b6020601f821160018114611d91575f8315611d5b5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b17845561147e565b5f84815260208120601f198516915b82811015611dc05787850151825560209485019460019092019101611da0565b5084821015611dfc57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f611e4160808301846116df565b9695505050505050565b5f60208284031215611e5b575f80fd5b81516116788161163056fea164736f6c634300081a000a68747470733a2f2f6261667962656965656e65666b6f7076706e743266767479356234676f3270796f71626b647370676e62666c673434726c71706232777561327a712e697066732e6e667473746f726167652e6c696e6b2f0000000000000000000000000000000000000000000000000000000000000c3700000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000aef33e18fc210a22dd42af5578837758b2349770