//
0x608060405260006006556000600855681b1ae4d6e2ef5000006009553480156200002857600080fd5b50604051620020ed380380620020ed8339810160408190526200004b9162000160565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600280546001600160a01b0385166001600160a01b0319918216179091556003839055600a805490911633179055620000e6620000d18262015180620001c0565b42620000f360201b620012ff1790919060201c565b60075550620001f8915050565b600080620001028385620001a5565b905083811015620001595760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b6000806000606084860312156200017657600080fd5b83516001600160a01b03811681146200018e57600080fd5b602085015160409095015190969495509392505050565b60008219821115620001bb57620001bb620001e2565b500190565b6000816000190483118215151615620001dd57620001dd620001e2565b500290565b634e487b7160e01b600052601160045260246000fd5b611ee580620002086000396000f3fe608060405234801561001057600080fd5b506004361061013e5760003560e01c8063017e7e5814610143578063081e3eda1461016c5780630ba84cd21461017e5780631526fe271461019357806317caf6f1146101e95780632143e545146101f25780633197cbb614610205578063441a3e701461020e57806348e43af41461022157806351eb05a6146102345780635312ea8e146102475780635fa7b83f1461025a578063630b5ba114610263578063715018a61461026b57806378e97925146102735780638da5cb5b1461027c5780638dbb1e3a1461028457806393f1a40b14610297578063adb61832146102f7578063af018de8146102fd578063c54aabae14610310578063de73149d14610323578063e2bbb1581461032c578063e83157421461033f578063f2fde38b14610348578063fc0c546a1461035b575b600080fd5b600a54610156906001600160a01b031681565b6040516101639190611c7b565b60405180910390f35b6004545b604051908152602001610163565b61019161018c366004611b4f565b61036e565b005b6101a66101a1366004611b4f565b6103eb565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e001610163565b61017060065481565b610191610200366004611c30565b610448565b61017060085481565b61019161021c366004611c0e565b610623565b61017061022f366004611b81565b61078f565b610191610242366004611b4f565b6108b3565b610191610255366004611b4f565b610af5565b61017060035481565b610191610bdf565b610191610c0a565b61017060075481565b610156610c71565b610170610292366004611c0e565b610c80565b6102d76102a5366004611b81565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610163565b42610170565b61019161030b366004611bb1565b610cba565b61017061031e366004611b81565b610eb4565b61017061a8c081565b61019161033a366004611c0e565b610efd565b61017060095481565b610191610356366004611b15565b611222565b600254610156906001600160a01b031681565b33610377610c71565b6001600160a01b0316146103a65760405162461bcd60e51b815260040161039d90611cdb565b60405180910390fd5b6103ae610bdf565b600381905560405181815233907fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c40539060200160405180910390a250565b600481815481106103fb57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b03909516965092949193909261ffff16919087565b33610451610c71565b6001600160a01b0316146104775760405162461bcd60e51b815260040161039d90611cdb565b6101908361ffff1611156104db5760405162461bcd60e51b815260206004820152602560248201527f7365743a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b606482015260840161039d565b61a8c082111561052d5760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161039d565b801561053b5761053b610bdf565b61057e846105786004888154811061055557610555611e53565b90600052602060002090600702016001015460065461135c90919063ffffffff16565b906112ff565b600681905550836004868154811061059857610598611e53565b90600052602060002090600702016001018190555082600486815481106105c1576105c1611e53565b60009182526020909120600790910201600401805461ffff191661ffff929092169190911790556105f482610e10611d81565b6004868154811061060757610607611e53565b9060005260206000209060070201600501819055505050505050565b600260015414156106465760405162461bcd60e51b815260040161039d90611d10565b600260018190555060006004838154811061066357610663611e53565b6000918252602080832086845260058252604080852033865290925292208054600790920290920192508311156106d15760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015260640161039d565b6106da846108b3565b6106e3846113b8565b82156107275780546106f5908461135c565b8155815461070d906001600160a01b03163385611521565b828260060160008282546107219190611ddf565b90915550505b600382015481546107489164e8d4a51000916107429161157c565b906115fb565b6001820155604051838152849033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050600180555050565b600080600484815481106107a5576107a5611e53565b600091825260208083208784526005825260408085206001600160a01b038916865290925292206003600790920290920190810154600682015460028301549294509091421180156107f657508015155b1561085c57600061080b856002015442610c80565b9050600061083860065461074288600101546108326003548761157c90919063ffffffff16565b9061157c565b9050610857610850846107428464e8d4a5100061157c565b85906112ff565b935050505b600061088c846001015461088664e8d4a5100061074287896000015461157c90919063ffffffff16565b9061135c565b90506108a58460020154826112ff90919063ffffffff16565b955050505050505b92915050565b6000600482815481106108c8576108c8611e53565b90600052602060002090600702019050806002015442116108e7575050565b60068101548015806108fb57506001820154155b8061090857506000600854115b1561091857504260029091015550565b6000610928836002015442610c80565b9050600061094f60065461074286600101546108326003548761157c90919063ffffffff16565b600254600a80549293506001600160a01b03918216926340c10f199216906109789085906115fb565b6040518363ffffffff1660e01b8152600401610995929190611c8f565b600060405180830381600087803b1580156109af57600080fd5b505af11580156109c3573d6000803e3d6000fd5b50506002546040516340c10f1960e01b81526001600160a01b0390911692506340c10f1991506109f99030908590600401611c8f565b600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b50505050610a55610a4a8461074264e8d4a510008561157c90919063ffffffff16565b6003860154906112ff565b6003850155426002808601919091556009549054604080516318160ddd60e01b815290516001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae39190611b68565b1115610aee57426008555b5050505050565b60026001541415610b185760405162461bcd60e51b815260040161039d90611d10565b6002600181905550600060048281548110610b3557610b35611e53565b6000918252602080832085845260058252604080852033865290925290832080548482556001820185905560028201859055600382018590556007939093029091016006810180549195509193839291610b90908490611ddf565b90915550508254610bab906001600160a01b03163383611521565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200161077d565b60045460005b81811015610c0657610bf6816108b3565b610bff81611e22565b9050610be5565b5050565b33610c13610c71565b6001600160a01b031614610c395760405162461bcd60e51b815260040161039d90611cdb565b600080546040516001600160a01b0390911690600080516020611e90833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60008060085411610c9a57610c95828461135c565b610cb3565b6008548311610cb057600854610c95908461135c565b60005b9392505050565b33610cc3610c71565b6001600160a01b031614610ce95760405162461bcd60e51b815260040161039d90611cdb565b6101908361ffff161115610d4d5760405162461bcd60e51b815260206004820152602560248201527f6164643a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b606482015260840161039d565b61a8c0821115610d9f5760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161039d565b8015610dad57610dad610bdf565b60006007544211610dc057600754610dc2565b425b600654909150610dd290876112ff565b6006556040805160e0810182526001600160a01b0387168152602081018890529081018290526000606082015261ffff8516608082015260049060a08101610e1c86610e10611d81565b81526000602091820181905283546001808201865594825290829020835160079092020180546001600160a01b0319166001600160a01b0390921691909117815590820151928101929092556040810151600283015560608101516003830155608081015160048301805461ffff191661ffff90921691909117905560a0810151600583015560c00151600690910155505050505050565b60008281526005602090815260408083206001600160a01b038516845290915281206003810154610ee6904290611da0565b91506000821215610ef657600091505b5092915050565b60026001541415610f205760405162461bcd60e51b815260040161039d90611d10565b6002600181905550600060048381548110610f3d57610f3d611e53565b60009182526020808320868452600582526040808520338652909252922060079091029091019150610f6e846108b3565b610f77846113b8565b82156111ce5781546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610fad903090600401611c7b565b60206040518083038186803b158015610fc557600080fd5b505afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190611b68565b83546040516323b872dd60e01b8152336004820152306024820152604481018790529192506001600160a01b0316906323b872dd90606401602060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110879190611b32565b5082546040516370a0823160e01b81526000916001600160a01b0316906370a08231906110b8903090600401611c7b565b60206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190611b68565b9050611114818361135c565b600485015490955061ffff16156111a0576004840154600090611144906127109061074290899061ffff1661157c565b90506111508187611ddf565b600a54865491975061116f916001600160a01b03908116911683611521565b835461117b90876112ff565b8455600685018054879190600090611194908490611d47565b909155506111cb915050565b82546111ac90866112ff565b83556006840180548691906000906111c5908490611d47565b90915550505b50505b600382015481546111e99164e8d4a51000916107429161157c565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200161077d565b3361122b610c71565b6001600160a01b0316146112515760405162461bcd60e51b815260040161039d90611cdb565b6001600160a01b0381166112b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039d565b600080546040516001600160a01b0380851693921691600080516020611e9083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061130c8385611d47565b905083811015610cb35760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015260640161039d565b6000828211156113ae5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161039d565b610cb38284611ddf565b6000600482815481106113cd576113cd611e53565b60009182526020808320858452600582526040808520338652909252922060038101546007909202909201925061141457600582015461140e9042906112ff565b60038201555b6000611442826001015461088664e8d4a510006107428760030154876000015461157c90919063ffffffff16565b600085815260056020908152604080832033845290915290206003015490915042106114c957600081118061147b575060008260020154115b156114c45760006114998360020154836112ff90919063ffffffff16565b6000600285015560058501549091506114b39042906112ff565b60038401556114c23382611653565b505b61151b565b801561151b5760028201546114de90826112ff565b6002830155604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6115778363a9059cbb60e01b8484604051602401611540929190611c8f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118b4565b505050565b60008261158b575060006108ad565b60006115978385611d81565b9050826115a48583611d5f565b14610cb35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161039d565b60008082116116495760405162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015260640161039d565b610cb38284611d5f565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611684903090600401611c7b565b60206040518083038186803b15801561169c57600080fd5b505afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190611b68565b90506000818311156117d6576002546001600160a01b03166340c10f19306116fc868661135c565b6040518363ffffffff1660e01b8152600401611719929190611c8f565b600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b81526001600160a01b03909116925063a9059cbb915061177d9087908790600401611c8f565b602060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf9190611b32565b905061185d565b60025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906118089087908790600401611c8f565b602060405180830381600087803b15801561182257600080fd5b505af1158015611836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185a9190611b32565b90505b8061151b5760405162461bcd60e51b815260206004820152602160248201527f73616665546f6b656e5472616e6665723a207472616e73666572206661696c656044820152601960fa1b606482015260840161039d565b6000611909826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119869092919063ffffffff16565b80519091501561157757808060200190518101906119279190611b32565b6115775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161039d565b6060611995848460008561199d565b949350505050565b6060824710156119fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161039d565b843b611a4c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039d565b600080866001600160a01b03168587604051611a689190611c5f565b60006040518083038185875af1925050503d8060008114611aa5576040519150601f19603f3d011682016040523d82523d6000602084013e611aaa565b606091505b5091509150611aba828286611ac5565b979650505050505050565b60608315611ad4575081610cb3565b825115611ae45782518084602001fd5b8160405162461bcd60e51b815260040161039d9190611ca8565b803561ffff81168114611b1057600080fd5b919050565b600060208284031215611b2757600080fd5b8135610cb381611e69565b600060208284031215611b4457600080fd5b8151610cb381611e81565b600060208284031215611b6157600080fd5b5035919050565b600060208284031215611b7a57600080fd5b5051919050565b60008060408385031215611b9457600080fd5b823591506020830135611ba681611e69565b809150509250929050565b600080600080600060a08688031215611bc957600080fd5b853594506020860135611bdb81611e69565b9350611be960408701611afe565b9250606086013591506080860135611c0081611e81565b809150509295509295909350565b60008060408385031215611c2157600080fd5b50508035926020909101359150565b600080600080600060a08688031215611c4857600080fd5b8535945060208601359350611be960408701611afe565b60008251611c71818460208701611df6565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020815260008251806020840152611cc7816040850160208701611df6565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611d5a57611d5a611e3d565b500190565b600082611d7c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611d9b57611d9b611e3d565b500290565b60008083128015600160ff1b850184121615611dbe57611dbe611e3d565b6001600160ff1b0384018313811615611dd957611dd9611e3d565b50500390565b600082821015611df157611df1611e3d565b500390565b60005b83811015611e11578181015183820152602001611df9565b8381111561151b5750506000910152565b6000600019821415611e3657611e36611e3d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611e7e57600080fd5b50565b8015158114611e7e57600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220d7be75dae77e713a63ce56155cdf99fe8a3ae1f3340fb161f1de988a383c452964736f6c63430008070033000000000000000000000000210860a8d8830e43a93b37856af3fc357395ac88000000000000000000000000000000000000000000000000000aa87bee5380000000000000000000000000000000000000000000000000000000000000000008