0x608060405260646004556107d06005553480156200001c57600080fd5b50604051620057a6380380620057a68339810160408190526200003f91620001a2565b6200004a3362000135565b60026001556001600160a01b038216620000ab5760405162461bcd60e51b815260206004820152601a60248201527f574f574d41583a2057726f6e672057455448206164647265737300000000000060448201526064015b60405180910390fd5b6001600160a01b038116620001035760405162461bcd60e51b815260206004820152601e60248201527f574f574d41583a2057726f6e67207472656173757279206164647265737300006044820152606401620000a2565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055620001da565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019d57600080fd5b919050565b60008060408385031215620001b657600080fd5b620001c18362000185565b9150620001d16020840162000185565b90509250929050565b6155bc80620001ea6000396000f3fe60806040526004361061012c5760003560e01c80638da5cb5b116100a5578063bf654aac11610074578063f14210a611610059578063f14210a61461040f578063f2fde38b1461042f578063f3fef3a31461044f57610133565b8063bf654aac146103d9578063d3e1c284146103ef57610133565b80638da5cb5b1461035b578063923b8a2a14610379578063a66cd09414610399578063ad5c4648146103b957610133565b806343f68a49116100fc57806367ca7c91116100e157806367ca7c9114610302578063715018a6146103225780638c04166f1461033757610133565b806343f68a49146102aa57806361d027b3146102ca57610133565b8062d5a9e81461021f57806318780684146102485780632c8958f61461026a5780633e88c8ab1461028a57610133565b3661013357005b34801561013f57600080fd5b5060018054146101a25760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b60648201526084015b60405180910390fd5b60008060003660006101b560003661046f565b945094509450945094508461020c5760405162461bcd60e51b815260206004820152601c60248201527f574f574d41583a20756e737570706f727465642063616c6c6261636b000000006044820152606401610199565b610218848484846104e4565b5050505050005b61023261022d366004614b0f565b610634565b60405161023f9190614f68565b60405180910390f35b34801561025457600080fd5b50610268610263366004614ad4565b610658565b005b34801561027657600080fd5b50610268610285366004614ad4565b6106c0565b34801561029657600080fd5b506102686102a536600461479f565b610729565b3480156102b657600080fd5b506102686102c5366004614d0a565b610735565b3480156102d657600080fd5b506003546102ea906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561030e57600080fd5b5061026861031d3660046147fb565b610742565b34801561032e57600080fd5b506102686107b0565b34801561034357600080fd5b5061034d60055481565b60405190815260200161023f565b34801561036757600080fd5b506000546001600160a01b03166102ea565b34801561038557600080fd5b50610268610394366004614ad4565b6107c4565b3480156103a557600080fd5b506102686103b4366004614d0a565b61082d565b3480156103c557600080fd5b506002546102ea906001600160a01b031681565b3480156103e557600080fd5b5061034d60045481565b3480156103fb57600080fd5b5061026861040a366004614ad4565b61083a565b34801561041b57600080fd5b5061026861042a366004614d0a565b6108a2565b34801561043b57600080fd5b5061026861044a366004614739565b61095d565b34801561045b57600080fd5b5061026861046a366004614773565b6109ed565b600080803681600487810135906024808a01359160448b01358b0191820191013580601f811680156104a45780602003820191505b608482018c146104c9576000808080809a509a509a509a509a505050505050506104da565b506001995093975091955093509150505b9295509295909350565b6000841380156104f45750600083125b156105845761057f3385336001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b505afa15801561054b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056f9190614756565b6001600160a01b03169190610a0b565b61062e565b6000841280156105945750600083135b156105d75761057f3384336001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b60405162461bcd60e51b815260206004820152602660248201527f574f574d41583a20556e697377617020763320696e76617269616e742076696f6044820152653630ba34b7b760d11b6064820152608401610199565b50505050565b606061063e610a88565b61064782610aeb565b90506106536002600155565b919050565b60018054146106b55760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b6064820152608401610199565b61062e848383610c06565b600180541461071d5760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b6064820152608401610199565b61062e84848484610c2a565b61062e84848484610d27565b61073d610d3b565b600555565b600180541461079f5760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b6064820152608401610199565b6107a98585610d95565b5050505050565b6107b8610d3b565b6107c26000610da9565b565b60018054146108215760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b6064820152608401610199565b61062e84848484610e11565b610835610d3b565b600455565b60018054146108975760405162461bcd60e51b815260206004820152602360248201527f574f574d41583a206e6f7420616c6c6f776564206f757473696465206f66207360448201526207761760ec1b6064820152608401610199565b61062e838383610c06565b6108aa610d3b565b6003546040516000916001600160a01b03169083908381818185875af1925050503d80600081146108f7576040519150601f19603f3d011682016040523d82523d6000602084013e6108fc565b606091505b50509050806109595760405162461bcd60e51b8152602060048201526024808201527f576f776d61783a204661696c656420746f2073656e64206e617469766520746f6044820152636b656e7360e01b6064820152608401610199565b5050565b610965610d3b565b6001600160a01b0381166109e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610199565b6109ea81610da9565b50565b6109f5610d3b565b600354610959906001600160a01b038481169116835b6040516001600160a01b038316602482015260448101829052610a8390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152610ea8565b505050565b600180541415610ae55760405162461bcd60e51b815260206004820152602260248201527f574f574d41583a207265656e7472616e742073776170206e6f7420616c6c6f77604482015261195960f21b6064820152608401610199565b60018055565b6060610af682610f8d565b6000610b01836112c1565b905060005b610b136060850185615284565b9050811015610b6657610b53610b2c6060860186615284565b83818110610b3c57610b3c615542565b9050602002810190610b4e91906152ce565b6113a0565b5080610b5e816154de565b915050610b06565b50610b70836114fb565b91506000610b816020850185614739565b6001600160a01b031614610ba157610b9c6020840184614739565b610bae565b6002546001600160a01b03165b6001600160a01b0316337f25a3ab87780ac0e2eeeb645d408cbc89d66c72590ae0e1f81bda8f3d3a8d121683610be76040880188615284565b87604051610bf89493929190615179565b60405180910390a350919050565b6000610c1482840184614739565b905061062e6001600160a01b0382163386610a0b565b600084138015610c3a5750600083125b15610c7d5761057f3385336001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b600084128015610c8d5750600083135b15610cd05761057f3384336001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b60405162461bcd60e51b815260206004820152602660248201527f574f574d41583a20416c676562726120563120696e76617269616e742076696f6044820152653630ba34b7b760d11b6064820152608401610199565b61062e6001600160a01b0385163385610a0b565b6000546001600160a01b031633146107c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610199565b6109596001600160a01b0383163383610a0b565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610e1f82840184614990565b90508015610e6a57610e653386336001600160a01b0316630fc63d106040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b6107a9565b6107a93386336001600160a01b0316635f64b55b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b6000610efd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661197c9092919063ffffffff16565b805190915015610a835780806020019051810190610f1b91906149ad565b610a835760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610199565b6000610f9c6040830183615284565b905011610ff65760405162461bcd60e51b815260206004820152602260248201527f574f574d41583a204e6f206f757470757420746f6b656e732073706563696669604482015261195960f21b6064820152608401610199565b61100360a0820182615284565b90506110126040830183615284565b9050146110875760405162461bcd60e51b815260206004820152602660248201527f574f574d41583a2057726f6e6720616d6f756e744f757445787065637465642060448201527f6c656e67746800000000000000000000000000000000000000000000000000006064820152608401610199565b6110946080820182615284565b90506110a36040830183615284565b9050146110f25760405162461bcd60e51b815260206004820152601d60248201527f574f574d41583a2057726f6e6720736c697070616765206c656e6774680000006044820152606401610199565b60005b6111026040830183615284565b905081101561095957600061111a6040840184615284565b8381811061112a5761112a615542565b905060200201602081019061113f9190614739565b6001600160a01b031614156111a15760405162461bcd60e51b815260206004820152602260248201527f574f574d41583a2057726f6e67206f757470757420746f6b656e206164647265604482015261737360f01b6064820152608401610199565b60006111b060a0840184615284565b838181106111c0576111c0615542565b905060200201351161123a5760405162461bcd60e51b815260206004820152602560248201527f574f574d41583a2057726f6e6720616d6f756e744f757445787065637465642060448201527f76616c75650000000000000000000000000000000000000000000000000000006064820152608401610199565b60055461124a6080840184615284565b8381811061125a5761125a615542565b9050602002013511156112af5760405162461bcd60e51b815260206004820152601c60248201527f574f574d41583a20536c69707061676520697320746f6f2068696768000000006044820152606401610199565b806112b9816154de565b9150506110f5565b6000806000341180156112e9575060006112de6020850185614739565b6001600160a01b0316145b80156112f757506020830135155b15611363575060025460408051630d0e30db60e41b8152905134926001600160a01b03169163d0e30db091849160048082019260009290919082900301818588803b15801561134557600080fd5b505af1158015611359573d6000803e3d6000fd5b505050505061139a565b60208301351561139a57506020820180359061139a903390309084906113899088614739565b6001600160a01b0316929190611995565b92915050565b6000806113b06020840184614739565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b1580156113f157600080fd5b505afa158015611405573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142991906149ca565b90506000805b61143c6040860186615284565b90508110156114f3576114d56114556020870187614739565b60208701356114676040890189615284565b8581811061147757611477615542565b905060200281019061148991906152e4565b6114979060200135876153db565b6114a191906153b9565b6114ae6040890189615284565b858181106114be576114be615542565b90506020028101906114d091906152e4565b6119cd565b6114df90836153a1565b9150806114eb816154de565b91505061142f565b509392505050565b606061150a6040830183615284565b905067ffffffffffffffff81111561152457611524615558565b60405190808252806020026020018201604052801561154d578160200160208202803683370190505b50905060008060005b6115636040860186615284565b9050811015611974576115796040860186615284565b8281811061158957611589615542565b905060200201602081019061159e9190614739565b91506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611640576040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b91906149ca565b6116bb565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561168357600080fd5b505afa158015611697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bb91906149ca565b925060006116cc60a0870187615284565b838181106116dc576116dc615542565b905060200201358411156117bb576116f760a0870187615284565b8381811061170757611707615542565b905060200201358461171991906153fa565b905060006127106004548661172e91906153db565b61173891906153b9565b9050808211156117725790508061174f81866153fa565b86848151811061176157611761615542565b6020026020010181815250506117b5565b61177f60a0880188615284565b8481811061178f5761178f615542565b905060200201358684815181106117a8576117a8615542565b6020026020010181815250505b506118a1565b6127106117cb6080880188615284565b848181106117db576117db615542565b905060200201356127106117ef91906153fa565b6117fc60a0890189615284565b8581811061180c5761180c615542565b9050602002013561181d91906153db565b61182791906153b9565b8410156118815760405162461bcd60e51b815260206004820152602260248201527f574f574d41583a20496e73756666696369656e74206f757470757420616d6f756044820152611b9d60f21b6064820152608401610199565b8385838151811061189457611894615542565b6020026020010181815250505b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561192557600254604051632e1a7d4d60e01b8152600481018690526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561190c57600080fd5b505af1158015611920573d6000803e3d6000fd5b505050505b60035461193d9084906001600160a01b0316836120ee565b611961833387858151811061195457611954615542565b60200260200101516120ee565b508061196c816154de565b915050611556565b505050919050565b606061198b84846000856121d1565b90505b9392505050565b6040516001600160a01b038085166024830152831660448201526064810182905261062e9085906323b872dd60e01b90608401610a37565b60007f554e49535741505f56330000000000000000000000000000000000000000000082606001351415611a1457611a0d83611a0884615411565b6122c5565b905061198e565b7f48415348464c4f5700000000000000000000000000000000000000000000000082606001351415611a5357611a0d8484611a4e85615411565b6123d2565b7f574f4d424154000000000000000000000000000000000000000000000000000082606001351415611a9257611a0d8484611a8d85615411565b61258e565b7f4c4556454c00000000000000000000000000000000000000000000000000000082606001351415611ad157611a0d8484611acc85615411565b612659565b7f444f444f5f56320000000000000000000000000000000000000000000000000082606001351415611b1057611a0d8484611b0b85615411565b6127fd565b7f444f444f5f56330000000000000000000000000000000000000000000000000082606001351415611b4f57611a0d8484611b4a85615411565b612943565b7f574f4f464900000000000000000000000000000000000000000000000000000082606001351415611b8e57611a0d8484611b8985615411565b6129f4565b7f554e49535741505f56320000000000000000000000000000000000000000000082606001351415611bcd57611a0d8484611bc885615411565b612a69565b7f435552564500000000000000000000000000000000000000000000000000000082606001351415611c0c57611a0d8484611c0785615411565b612bf8565b7f50414e43414b45535741505f535441424c45000000000000000000000000000082606001351415611c4b57611a0d8484611c4685615411565b612db5565b7f444f444f5f56310000000000000000000000000000000000000000000000000082606001351415611c8a57611a0d8484611c8585615411565b612ecc565b7f42414c414e4345525f563200000000000000000000000000000000000000000082606001351415611cc957611a0d8484611cc485615411565b612f31565b7f4d4156455249434b5f563100000000000000000000000000000000000000000082606001351415611d0757611a0d83611d0284615411565b613098565b7f534144444c45000000000000000000000000000000000000000000000000000082606001351415611d4657611a0d8484611d4185615411565b613145565b7f46554c43524f4d0000000000000000000000000000000000000000000000000082606001351415611d8557611a0d8484611d8085615411565b613255565b7f554e49535741505f56325f524f5554455200000000000000000000000000000082606001351415611dc457611a0d8484611dbf85615411565b6132b5565b7f454c41535449430000000000000000000000000000000000000000000000000082606001351415611e0357611a0d8484611dfe85615411565b613473565b7f414c47454252415f56310000000000000000000000000000000000000000000082606001351415611e4257611a0d8484611e3d85615411565b6135e6565b7f414c47454252415f56315f39000000000000000000000000000000000000000082606001351415611e7c57611a0d8484611e3d85615411565b7f53594e435357415000000000000000000000000000000000000000000000000082606001351415611ebb57611a0d8484611eb685615411565b6136e8565b63564f4f4960e01b82606001351415611ee157611a0d8484611edc85615411565b6138d1565b7f56454c4f434f52455f563200000000000000000000000000000000000000000082606001351415611f2d57600254611a0d906001600160a01b03168585611f2886615411565b6139be565b7f495a49535741500000000000000000000000000000000000000000000000000082606001351415611f6c57611a0d8484611f6785615411565b613ce8565b7f56454c4f44524f4d45000000000000000000000000000000000000000000000082606001351415611fab57611a0d8484611fa685615411565b613e1b565b7f575241505045445f4e415449564500000000000000000000000000000000000082606001351415611fea57611a0d8484611fe585615411565b613f7e565b7f4c49515549444954595f424f4f4b5f56325f31000000000000000000000000008260600135141561202957611a0d848461202485615411565b614068565b7f4d4156455249434b5f56320000000000000000000000000000000000000000008260600135141561206757611a0d8361206284615411565b6141dc565b7f53574141505f5632000000000000000000000000000000000000000000000000826060013514156120a657611a0d84846120a185615411565b6142c4565b60405162461bcd60e51b815260206004820152601a60248201527f574f574d41583a20556e6b6e6f776e204445582066616d696c790000000000006044820152606401610199565b806120f857505050565b6002546001600160a01b03848116911614156121bd576000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461215b576040519150601f19603f3d011682016040523d82523d6000602084013e612160565b606091505b505090508061062e5760405162461bcd60e51b8152602060048201526024808201527f576f776d61783a204661696c656420746f2073656e64206e617469766520746f6044820152636b656e7360e01b6064820152608401610199565b610a836001600160a01b0384168383610a0b565b6060824710156122495760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610199565b600080866001600160a01b031685876040516122659190614dcf565b60006040518083038185875af1925050503d80600081146122a2576040519150601f19603f3d011682016040523d82523d6000602084013e6122a7565b606091505b50915091506122b8878383876143a8565b925050505b949350505050565b60008082608001518060200190518101906122e091906149ad565b90506000816123035773fffd8963efd1fc6a506488495d951d5263988d2561230a565b6401000276a45b604085810151815160008082526020820193849052630251596160e31b909352929350909182916001600160a01b03169063128acb089061235690309088908c90899060248101614e25565b6040805180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a79190614ab0565b91509150836123be576123b9826154f9565b6123c7565b6123c7816154f9565b979650505050505050565b60008082608001518060200190518101906123ed9190614b4a565b604084015190915061240a906001600160a01b038716908661441e565b8060e0015184101561241e5760c081018490525b82516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561246157600080fd5b505afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249991906149ca565b905083604001516001600160a01b031663c52ac720836040518263ffffffff1660e01b81526004016124cb9190614fca565b600060405180830381600087803b1580156124e557600080fd5b505af11580156124f9573d6000803e3d6000fd5b505085516040516370a0823160e01b81523060048201528493506001600160a01b0390911691506370a08231906024015b60206040518083038186803b15801561254257600080fd5b505afa158015612556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257a91906149ca565b61258491906153fa565b9695505050505050565b60408101516000906125ab906001600160a01b038616908561441e565b60408281015183519151639908fc8b60e01b81526001600160a01b0387811660048301529283166024820152604481018690526000606482015230608482015260001960a4820152911690639908fc8b9060c4016040805180830381600087803b15801561261857600080fd5b505af115801561262c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126509190614ab0565b50949350505050565b6040810151600090612676906001600160a01b0386169085610a0b565b81516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f191906149ca565b6040848101518551825160008082526020820194859052631fa196a960e21b9094529394506001600160a01b0390911692637e865aa49261273c928a92909190309060248101614deb565b600060405180830381600087803b15801561275657600080fd5b505af115801561276a573d6000803e3d6000fd5b505084516040516370a0823160e01b81523060048201528493506001600160a01b0390911691506370a082319060240160206040518083038186803b1580156127b257600080fd5b505afa1580156127c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ea91906149ca565b6127f491906153fa565b95945050505050565b604081015160009061281a906001600160a01b0386169085610a0b565b600082608001518060200190518101906128349190614d23565b905060ff81166128c4576040808401519051632f58056d60e21b81523060048201526001600160a01b039091169063bd6015b490602401602060405180830381600087803b15801561288557600080fd5b505af1158015612899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bd91906149ca565b91506114f3565b6040808401519051636ec9facd60e11b81523060048201526001600160a01b039091169063dd93f59a90602401602060405180830381600087803b15801561290b57600080fd5b505af115801561291f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f491906149ca565b60408082015182519151637597a8d360e11b81523060048201526001600160a01b03868116602483015292831660448201526064810185905260006084820181905260c060a483015260c48201819052929091169063eb2f51a69060e4015b602060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b91906149ca565b6040810151600090612a11906001600160a01b0386169085610a0b565b60408281015183519151633ee101c160e11b81526001600160a01b03878116600483015292831660248201526044810186905260006064820181905230608483015260a4820152911690637dc203829060c4016129a2565b6040810151600090612a86906001600160a01b0386169085610a0b565b60008260800151806020019051810190612aa091906149ca565b90506000856001600160a01b031684604001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190614756565b6001600160a01b0316149050600080612b408660400151846144df565b91509150612b5087838387614578565b94508415612bed5785604001516001600160a01b031663022c0d9f84612b765786612b79565b60005b85612b85576000612b87565b875b604080516000815260208101918290526001600160e01b031960e086901b16909152612bba929190309060248101615256565b600060405180830381600087803b158015612bd457600080fd5b505af1158015612be8573d6000803e3d6000fd5b505050505b505050509392505050565b60008060008360800151806020019051810190612c159190614a5a565b85516040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015612c6057600080fd5b505afa158015612c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9891906149ca565b6040860151909150612cb5906001600160a01b038916908861441e565b6040808601519051630f7c084960e21b8152600f85810b600483015284900b602482015260448101889052600060648201526001600160a01b0390911690633df02124906084015b600060405180830381600087803b158015612d1757600080fd5b505af1158015612d2b573d6000803e3d6000fd5b505086516040516370a0823160e01b81523060048201528493506001600160a01b0390911691506370a082319060240160206040518083038186803b158015612d7357600080fd5b505afa158015612d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dab91906149ca565b6123c791906153fa565b60008060008360800151806020019051810190612dd29190614a5a565b85516040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015612e1d57600080fd5b505afa158015612e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5591906149ca565b6040860151909150612e72906001600160a01b038916908861441e565b6040808601519051630b68372160e31b81526fffffffffffffffffffffffffffffffff80861660048301528416602482015260448101889052600060648201526001600160a01b0390911690635b41b90890608401612cfd565b6040810151600090612ee9906001600160a01b038616908561441e565b6040808301519051638dae733360e01b8152600481018590526000602482018190526060604483015260648201526001600160a01b0390911690638dae7333906084016129a2565b60008060008360800151806020019051810190612f4e91906149e3565b9150915060006040518060c0016040528084815260200160006001811115612f7857612f7861552c565b81526001600160a01b03808a16602083015287511660408201526060810188905260800160006040519080825280601f01601f191660200182016040528015612fc8576020820181803683370190505b50905260408051608081018252308082526000602083018190529282015260608101919091529091506130056001600160a01b038916848961441e565b6040516352bbbe2960e01b81526001600160a01b038416906352bbbe299061303a9085908590600090600019906004016150bc565b602060405180830381600087803b15801561305457600080fd5b505af1158015613068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308c91906149ca565b98975050505050505050565b60008082608001518060200190518101906130b391906149ad565b905082604001516001600160a01b031663c51c902930868460008089608001516040518763ffffffff1660e01b81526004016130f496959493929190614f2a565b6040805180830381600087803b15801561310d57600080fd5b505af1158015613121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f49190614ab0565b600080600083608001518060200190518101906131629190614d3e565b85516040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b1580156131ad57600080fd5b505afa1580156131c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e591906149ca565b6040860151909150613202906001600160a01b038916908861441e565b60408086015190516348b4aac360e11b815260ff808616600483015284166024820152604481018890526000606482015260001960848201526001600160a01b039091169063916955869060a401612cfd565b6040810151600090613272906001600160a01b0386169085610a0b565b60408281015183519151634998b10960e11b81526001600160a01b03878116600483015292831660248201523060448201529116906393316212906064016129a2565b60008082604001516001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156132f757600080fd5b505af115801561330b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332f9190614756565b90506133456001600160a01b038616828661441e565b604080516002808252606082018352600092602083019080368337019050509050858160008151811061337a5761337a615542565b60200260200101906001600160a01b031690816001600160a01b0316815250508360000151816001815181106133b2576133b2615542565b6001600160a01b0392831660209182029290920101526040516338ed173960e01b8152908316906338ed1739906133f890889060009086903090600019906004016151e5565b600060405180830381600087803b15801561341257600080fd5b505af1158015613426573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261344e9190810190614904565b60018151811061346057613460615542565b6020026020010151925050509392505050565b60008082604001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156134b357600080fd5b505afa1580156134c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134eb9190614756565b6001600160a01b0316856001600160a01b03161490506000816135225773fffd8963efd1fc6a506488495d951d5263988d25613529565b6401000276a45b60408581015181516000808252602082019384905263092cc68360e21b909352929350909182916001600160a01b0316906324b31a0c906135759030908b908990899060248101614e5f565b6040805180830381600087803b15801561358e57600080fd5b505af11580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190614ab0565b91509150836135dd576135d8826154f9565b61308c565b61308c816154f9565b60008082604001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561362657600080fd5b505afa15801561363a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365e9190614756565b6001600160a01b0316856001600160a01b03161490506000816136955773fffd8963efd1fc6a506488495d951d5263988d2561369c565b6401000276a45b604085810151815160008082526020820193849052630251596160e31b909352929350909182916001600160a01b03169063128acb089061357590309088908c90899060248101614e25565b60008082604001516001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561372857600080fd5b505afa15801561373c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137609190614756565b90506137766001600160a01b0386168286610a0b565b6040838101519051631f2c13e160e31b81526001600160a01b03878116600483015291821660248201529082169063f9609f0890604401602060405180830381600087803b1580156137c757600080fd5b505af11580156137db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ff91906149ca565b50604080516001600160a01b03878116602083015230828401526002606080840191909152835180840390910181526080830180855287850151600080835260a0860196879052637132bb7f60e01b9096529194939190921691637132bb7f916138719186918691829160a401614f7b565b6040805180830381600087803b15801561388a57600080fd5b505af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190614c62565b60200151979650505050505050565b600080600083608001518060200190518101906138ee9190614d3e565b6040860151919350915061390d906001600160a01b038816908761441e565b60408085015190516347b5ef5560e11b815260ff808516600483015283166024820152604481018790526000606482015230608482015260001960a48201526001600160a01b0390911690638f6bdeaa9060c4015b6040805180830381600087803b15801561397b57600080fd5b505af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b39190614ab0565b509695505050505050565b60008082608001518060200190518101906139d99190614756565b90508060006001600160a01b03878116908916146139f757866139fa565b60005b90506000886001600160a01b031686600001516001600160a01b031614613a22578551613a25565b60005b905060606001600160a01b038316613b6757604051632e1a7d4d60e01b8152600481018990526001600160a01b038b1690632e1a7d4d90602401600060405180830381600087803b158015613a7957600080fd5b505af1158015613a8d573d6000803e3d6000fd5b50505060408089015190516342f3185360e11b81526001600160a01b039182166004820152600060248201819052868316604483015260648201819052600f8c900b608483015285831660a4830152600160c483015260e4820181905261012061010483015261012482015290861691506385e630a6908a90610144016000604051808303818588803b158015613b2357600080fd5b505af1158015613b37573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052613b609190810190614865565b9050613c4b565b613b7b6001600160a01b038416858a61441e565b60408781015190516342f3185360e11b81526001600160a01b039182166004820152600060248201819052858316604483015260648201819052600f8b900b608483015284831660a4830152600160c483015260e48201819052610120610104830152610124820152908516906385e630a69061014401600060405180830381600087803b158015613c0c57600080fd5b505af1158015613c20573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c489190810190614865565b90505b80600181518110613c5e57613c5e615542565b6020026020010151600f0b955060006001600160a01b0316826001600160a01b03161415613cdb57896001600160a01b031663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b158015613cc157600080fd5b505af1158015613cd5573d6000803e3d6000fd5b50505050505b5050505050949350505050565b6000808260800151806020019051810190613d039190614a8d565b604080516001600160a01b038816602082015291925060009101604051602081830303815290604052905083600001516001600160a01b0316866001600160a01b03161015613ddc5783604001516001600160a01b031663857f812f308785856040518563ffffffff1660e01b8152600401613d829493929190614ee7565b6040805180830381600087803b158015613d9b57600080fd5b505af1158015613daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd39190614ab0565b9350613e129050565b83604001516001600160a01b0316632c481252308785856040518563ffffffff1660e01b81526004016139629493929190614ee7565b50509392505050565b6000808260800151806020019051810190613e3691906149ca565b60408085015190516378a051ad60e11b8152600481018790526001600160a01b03888116602483015292935091169063f140a35a9060440160206040518083038186803b158015613e8657600080fd5b505afa158015613e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ebe91906149ca565b915081156114f3576040830151613ee0906001600160a01b0387169086610a0b565b60408301516001600160a01b031663022c0d9f8215613eff5783613f02565b60005b8315613f0f576000613f11565b845b604080516000815260208101918290526001600160e01b031960e086901b16909152613f44929190309060248101615256565b600060405180830381600087803b158015613f5e57600080fd5b505af1158015613f72573d6000803e3d6000fd5b50505050509392505050565b600081604001516001600160a01b0316846001600160a01b031614156140075781604001516001600160a01b0316632e1a7d4d846040518263ffffffff1660e01b8152600401613fd091815260200190565b600060405180830381600087803b158015613fea57600080fd5b505af1158015613ffe573d6000803e3d6000fd5b50505050614060565b81604001516001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561404657600080fd5b505af115801561405a573d6000803e3d6000fd5b50505050505b509092915050565b600080826080015180602001905181019061408391906149ca565b83516040516370a0823160e01b815230600482015260019290921492506000916001600160a01b03909116906370a082319060240160206040518083038186803b1580156140d057600080fd5b505afa1580156140e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410891906149ca565b6040850151909150614125906001600160a01b0388169087610a0b565b604080850151905163029e02cd60e51b815283151560048201523060248201526001600160a01b03909116906353c059a090604401602060405180830381600087803b15801561417457600080fd5b505af1158015614188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ac91906149ca565b5083516040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240161252a565b60008082608001518060200190518101906141f791906149ad565b905060008161420b57637fffffff19614211565b637fffffff5b60408051608080820183528882528515156020830152600082840152600384900b606083015287830151908801519251633eece7db60e01b815293945090926001600160a01b0390911691633eece7db91614273913091869190600401614e99565b6040805180830381600087803b15801561428c57600080fd5b505af11580156142a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c79190614ab0565b600080600083608001518060200190518101906142e19190614a13565b9150915060006040518060c001604052808481526020016000600181111561430b5761430b61552c565b81526001600160a01b03808a166020808401829052895190921660408085019190915260608085018c90526080948501889052815194850182523080865260009486018590528583015284019290925290880151929350909161436f91908961441e565b85604001516001600160a01b03166352bbbe29838360006000196040518563ffffffff1660e01b815260040161303a94939291906150bc565b6060831561441457825161440d576001600160a01b0385163b61440d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610199565b50816122bd565b6122bd83836145e6565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e9060440160206040518083038186803b15801561446a57600080fd5b505afa15801561447e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a291906149ca565b6144ac91906153a1565b6040516001600160a01b03851660248201526044810182905290915061062e90859063095ea7b360e01b90606401610a37565b600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561451e57600080fd5b505afa158015614532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145569190614cba565b50915091508461456757808261456a565b81815b9350935050505b9250929050565b600080614587836127106153fa565b61459190876153db565b905060006145af6dffffffffffffffffffffffffffff8616836153db565b90506000826145d06127106dffffffffffffffffffffffffffff8a166153db565b6145da91906153a1565b905061308c81836153b9565b8151156145f65781518083602001fd5b8060405162461bcd60e51b81526004016101999190614fb7565b80516106538161558c565b60008083601f84011261462d57600080fd5b50813567ffffffffffffffff81111561464557600080fd5b60208301915083602082850101111561457157600080fd5b600082601f83011261466e57600080fd5b813561468161467c82615379565b615324565b81815284602083860101111561469657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126146c457600080fd5b81516146d261467c82615379565b8181528460208386010111156146e757600080fd5b6122bd8260208301602087016154b2565b8051600f81900b811461065357600080fd5b80516dffffffffffffffffffffffffffff8116811461065357600080fd5b805160ff8116811461065357600080fd5b60006020828403121561474b57600080fd5b813561198e8161558c565b60006020828403121561476857600080fd5b815161198e8161558c565b6000806040838503121561478657600080fd5b82356147918161558c565b946020939093013593505050565b600080600080606085870312156147b557600080fd5b84356147c08161558c565b935060208501359250604085013567ffffffffffffffff8111156147e357600080fd5b6147ef8782880161461b565b95989497509550505050565b60008060008060006080868803121561481357600080fd5b853561481e8161558c565b94506020860135935060408601359250606086013567ffffffffffffffff81111561484857600080fd5b6148548882890161461b565b969995985093965092949392505050565b6000602080838503121561487857600080fd5b825167ffffffffffffffff81111561488f57600080fd5b8301601f810185136148a057600080fd5b80516148ae61467c82615355565b80828252848201915084840188868560051b87010111156148ce57600080fd5b600094505b838510156148f8576148e4816146f8565b8352600194909401939185019185016148d3565b50979650505050505050565b6000602080838503121561491757600080fd5b825167ffffffffffffffff81111561492e57600080fd5b8301601f8101851361493f57600080fd5b805161494d61467c82615355565b80828252848201915084840188868560051b870101111561496d57600080fd5b600094505b838510156148f8578051835260019490940193918501918501614972565b6000602082840312156149a257600080fd5b813561198e816155a1565b6000602082840312156149bf57600080fd5b815161198e816155a1565b6000602082840312156149dc57600080fd5b5051919050565b600080604083850312156149f657600080fd5b825191506020830151614a088161558c565b809150509250929050565b60008060408385031215614a2657600080fd5b82519150602083015167ffffffffffffffff811115614a4457600080fd5b614a50858286016146b3565b9150509250929050565b60008060408385031215614a6d57600080fd5b614a76836146f8565b9150614a84602084016146f8565b90509250929050565b600060208284031215614a9f57600080fd5b81518060020b811461198e57600080fd5b60008060408385031215614ac357600080fd5b505080516020909101519092909150565b60008060008060608587031215614aea57600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156147e357600080fd5b600060208284031215614b2157600080fd5b813567ffffffffffffffff811115614b3857600080fd5b820160c0818503121561198e57600080fd5b600060208284031215614b5c57600080fd5b815167ffffffffffffffff80821115614b7457600080fd5b908301906101a08286031215614b8957600080fd5b614b916152fa565b614b9a83614610565b8152614ba860208401614610565b6020820152614bb960408401614610565b6040820152614bca60608401614610565b6060820152614bdb60808401614610565b6080820152614bec60a08401614610565b60a082015260c0838101519082015260e0808401519082015261010080840151908201526101208084015190820152610140808401519082015261016080840151908201526101808084015183811115614c4557600080fd5b614c51888287016146b3565b918301919091525095945050505050565b600060408284031215614c7457600080fd5b6040516040810181811067ffffffffffffffff82111715614c9757614c97615558565b6040528251614ca58161558c565b81526020928301519281019290925250919050565b600080600060608486031215614ccf57600080fd5b614cd88461470a565b9250614ce66020850161470a565b9150604084015163ffffffff81168114614cff57600080fd5b809150509250925092565b600060208284031215614d1c57600080fd5b5035919050565b600060208284031215614d3557600080fd5b61198e82614728565b60008060408385031215614d5157600080fd5b614d5a83614728565b9150614a8460208401614728565b600081518084526020808501945080840160005b83811015614d9857815187529582019590820190600101614d7c565b509495945050505050565b60008151808452614dbb8160208601602086016154b2565b601f01601f19169290920160200192915050565b60008251614de18184602087016154b2565b9190910192915050565b60006001600160a01b038088168352808716602084015285604084015280851660608401525060a060808301526123c760a0830184614da3565b60006001600160a01b038088168352861515602084015285604084015280851660608401525060a060808301526123c760a0830184614da3565b60006001600160a01b038088168352866020840152851515604084015280851660608401525060a060808301526123c760a0830184614da3565b6001600160a01b038416815282516020820152602083015115156040820152604083015115156060820152606083015160030b608082015260c060a082015260006127f460c0830184614da3565b6001600160a01b03851681526fffffffffffffffffffffffffffffffff841660208201528260020b60408201526080606082015260006125846080830184614da3565b6001600160a01b03871681528560208201528415156040820152831515606082015282608082015260c060a0820152600061308c60c0830184614da3565b60208152600061198e6020830184614d68565b608081526000614f8e6080830187614da3565b6001600160a01b0386811660208501528516604084015282810360608401526123c78185614da3565b60208152600061198e6020830184614da3565b60208152614fe46020820183516001600160a01b03169052565b6000602083015161500060408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c083015160e08381019190915283015161010080840191909152830151610120808401919091528301516101408084019190915283015161016080840191909152830151610180808401919091528301516101a0808401526122bd6101c0840182614da3565b60e08152845160e0820152600060208601516150d78161556e565b61010083015260408601516001600160a01b03908116610120840152606087015116610140830152608086015161016083015260a086015160c06101808401526151256101a0840182614da3565b91505061516760208301866001600160a01b03808251168352602082015115156020840152806040830151166040840152506060810151151560608301525050565b60a082019390935260c0015292915050565b84815260606020808301829052908201849052600090859060808401835b878110156151c55783356151aa8161558c565b6001600160a01b031682529282019290820190600101615197565b5084810360408601526151d88187614d68565b9998505050505050505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156152355784516001600160a01b031683529383019391830191600101615210565b50506001600160a01b03969096166060850152505050608001529392505050565b8481528360208201526001600160a01b03831660408201526080606082015260006125846080830184614da3565b6000808335601e1984360301811261529b57600080fd5b83018035915067ffffffffffffffff8211156152b657600080fd5b6020019150600581901b360382131561457157600080fd5b60008235605e19833603018112614de157600080fd5b60008235609e19833603018112614de157600080fd5b6040516101a0810167ffffffffffffffff8111828210171561531e5761531e615558565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561534d5761534d615558565b604052919050565b600067ffffffffffffffff82111561536f5761536f615558565b5060051b60200190565b600067ffffffffffffffff82111561539357615393615558565b50601f01601f191660200190565b600082198211156153b4576153b4615516565b500190565b6000826153d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156153f5576153f5615516565b500290565b60008282101561540c5761540c615516565b500390565b600060a0823603121561542357600080fd5b60405160a0810167ffffffffffffffff828210818311171561544757615447615558565b81604052843591506154588261558c565b81835260208501356020840152604085013591506154758261558c565b81604084015260608501356060840152608085013591508082111561549957600080fd5b506154a63682860161465d565b60808301525092915050565b60005b838110156154cd5781810151838201526020016154b5565b8381111561062e5750506000910152565b60006000198214156154f2576154f2615516565b5060010190565b6000600160ff1b82141561550f5761550f615516565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600281106109ea57634e487b7160e01b600052602160045260246000fd5b6001600160a01b03811681146109ea57600080fd5b80151581146109ea57600080fdfea164736f6c6343000807000a0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000bd4a0f12293c54e4e8ad221271cf0d395dd60a71