60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61277f80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a082311161010457806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e14610449578063df4b477614610482578063ecec2ea214610497578063f2fde38b146104b757600080fd5b806395d89b41146103ee578063a457c2d7146103f6578063a9059cbb14610409578063bc4f9eb01461041c57600080fd5b80637e444312116100de5780637e444312146103af5780638129fc1c146103c25780638aa62b30146103ca5780638da5cb5b146103d357600080fd5b806370a082311461036b578063715018a6146103945780637b0472f01461039c57600080fd5b80632ff2e9dc116101715780634ef2372b1161014b5780634ef2372b146102bb57806353953e9f146102ce578063567e98f9146102d9578063584b62a1146102e257600080fd5b80632ff2e9dc14610286578063313ce5671461029957806339509351146102a857600080fd5b806317f4cb8b116101ad57806317f4cb8b1461024357806318160ddd1461025657806323b872dd1461025e5780632e17de781461027157600080fd5b806306fdde03146101d457806307cc6d69146101f2578063095ea7b314610220575b600080fd5b6101dc6104ca565b6040516101e99190612168565b60405180910390f35b6102126102003660046121d2565b609e6020526000908152604090205481565b6040519081526020016101e9565b61023361022e3660046121ed565b61055c565b60405190151581526020016101e9565b610212610251366004612217565b610576565b603554610212565b61023361026c366004612230565b6106bb565b61028461027f366004612217565b6106df565b005b6102126b87b595f2383509fe1000000081565b604051601281526020016101e9565b6102336102b63660046121ed565b610a37565b6102846102c936600461227a565b610a76565b6102126364a3994081565b610212609c5481565b6103586102f03660046121ed565b609a60209081526000928352604080842082529183529181902080546001820154600283015460038401546004850154600586015487516060810189526006880154815260078801549981019990995260089096015496880196909652929591949093909187565b6040516101e997969594939291906122c5565b6102126103793660046121d2565b6001600160a01b031660009081526033602052604090205490565b610284610ba1565b6102846103aa36600461231c565b610bb5565b6102126103bd366004612217565b610ed3565b610284610fdd565b610212609d5481565b6065546040516001600160a01b0390911681526020016101e9565b6101dc611187565b6102336104043660046121ed565b611196565b6102336104173660046121ed565b611240565b60975460985460995461042e92919083565b604080519384526020840192909252908201526060016101e9565b61021261045736600461233e565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61048a61124e565b6040516101e99190612371565b6102126104a53660046121d2565b609b6020526000908152604090205481565b6102846104c53660046121d2565b61138f565b6060603680546104d99061240d565b80601f01602080910402602001604051908101604052809291908181526020018280546105059061240d565b80156105525780601f1061052757610100808354040283529160200191610552565b820191906000526020600020905b81548152906001019060200180831161053557829003601f168201915b5050505050905090565b60003361056a81858561141c565b60019150505b92915050565b336000908152609a602090815260408083208484529091528120600101546105e55760405162461bcd60e51b815260206004820152601960248201527f54686973207374616b6520646f6573206e6f742065786973740000000000000060448201526064015b60405180910390fd5b336000908152609a6020908152604080832085845290915281206001810154600282015491929161061591611575565b9050600061063083600101544261157590919063ffffffff16565b90508260010154610e106106449190612457565b42101561065657506064949350505050565b826002015442111561066d57506064949350505050565b600183015461067f90624f1a00612457565b4210156106915750601e949350505050565b8161069d82604661246a565b6106a79190612497565b6106b290601e612457565b95945050505050565b6000336106c9858285611588565b6106d485858561161a565b506001949350505050565b336000908152609a602090815260408083208484529091529020600101546107495760405162461bcd60e51b815260206004820152601960248201527f54686973207374616b6520646f6573206e6f742065786973740000000000000060448201526064016105dc565b336000908152609a60209081526040808320848452909152902060030154156107d95760405162461bcd60e51b8152602060048201526024808201527f54686973207374616b652068617320616c7265616479206265656e20756e737460448201527f616b65640000000000000000000000000000000000000000000000000000000060648201526084016105dc565b336000908152609a602090815260408083208484529091528120906107fd83610ed3565b9050600061081882846004015461180e90919063ffffffff16565b9050600061089f82856040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160405180606001604052908160008201548152602001600182015481526020016002820154815250508152505061181a565b84549091506000906108b1908361180e565b905060006108d360646108cd6108c68a610576565b859061194d565b90611959565b90506108df3082611965565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101829052309063a9059cbb906044016020604051808303816000875af115801561093c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096091906124ab565b50336000908152609a602090815260408083208a84529091528120426003909101558654609c8054919290916109979084906124c8565b9091555050336000908152609e602052604081208054916109b7836124db565b9091555050336000908152609e602052604081205490036109e857609d80549060006109e2836124db565b91905055505b8554604080518981526020810192909252810182905233907fd9323ca80faaaf047170c44ee78d4bd7218de745b437ba055aaf1871e0e6e904906060015b60405180910390a250505050505050565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919061056a9082908690610a71908790612457565b61141c565b610a7e611a27565b8280610a875750815b80610a8f5750805b610b015760405162461bcd60e51b815260206004820152602c60248201527f4174206c65617374206f6e652062616e6b206372617368206576656e7420736860448201527f6f756c642062652074727565000000000000000000000000000000000000000060648201526084016105dc565b8215610b1d5760978054906000610b17836124f2565b91905055505b8115610b395760988054906000610b33836124f2565b91905055505b8015610b555760998054906000610b4f836124f2565b91905055505b604080518415158152831515602082015282151581830152905133917fe99c200312a6706571da9a29a514ed8da91920bc07fa9ba211c879ff99bba356919081900360600190a2505050565b610ba9611a27565b610bb36000611a81565b565b6003811015610c2c5760405162461bcd60e51b815260206004820152602860248201527f5374616b696e6720706572696f64206d757374206265206174206c656173742060448201527f33206d6f6e74687300000000000000000000000000000000000000000000000060648201526084016105dc565b6078811115610ca35760405162461bcd60e51b815260206004820152603860248201527f5374616b696e6720706572696f642063616e206f6e6c79206265206d6178696d60448201527f756d20313230206d6f6e7468732028313020796561727329000000000000000060648201526084016105dc565b60008211610d195760405162461bcd60e51b815260206004820152602860248201527f5374616b696e6720616d6f756e74206d7573742062652067726561746572207460448201527f68616e207a65726f00000000000000000000000000000000000000000000000060648201526084016105dc565b610d233383611aeb565b60046000610d3283600261246a565b610d3d90602a612457565b9050426000610d59610d528662278d0061194d565b429061180e565b336000908152609b6020526040812080549293508291610d78836124f2565b90915550506040805160e081018252888152602080820186815282840186815260006060808601828152608087018d815260a088018d815289519384018a52609754845260985484890152609954848b015260c0890193845233808652609a89528a86208c875289528a862099518a55965160018a01559451600289015590516003880155516004870155915160058601559051805160068601558084015160078601558501516008909401939093558252609e9052908120549003610e4e57609d8054906000610e48836124f2565b91905055505b336000908152609e60205260408120805491610e69836124f2565b919050555086609c6000828254610e809190612457565b90915550506040805182815260208101899052908101839052606081018690526080810185905233907f3565f48109c628ce039ba3b5f6daa7004ca580280fd8101024bd193fd60645789060a001610a26565b336000908152609a60209081526040808320848452909152812060010154610f3d5760405162461bcd60e51b815260206004820152601960248201527f54686973207374616b6520646f6573206e6f742065786973740000000000000060448201526064016105dc565b336000908152609a6020908152604080832085845290915281206006810154609754919291610f6c91906124c8565b6007830154609854919250600091610f8491906124c8565b6008840154609954919250600091610f9c91906124c8565b9050610fa981600261246a565b610fb483600961246a565b610fbf85601561246a565b610fc99190612457565b610fd39190612457565b9695505050505050565b600054610100900460ff1615808015610ffd5750600054600160ff909116105b806110175750303b158015611017575060005460ff166001145b6110895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105dc565b6000805460ff1916600117905580156110ac576000805461ff0019166101001790555b6111206040518060400160405280600e81526020017f42616e6b4372617368546f6b656e0000000000000000000000000000000000008152506040518060400160405280600481526020017f4241534800000000000000000000000000000000000000000000000000000000815250611c53565b611128611cc8565b61113e336b87b595f2383509fe10000000611965565b8015611184576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6060603780546104d99061240d565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909190838110156112335760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016105dc565b6106d4828686840361141c565b60003361056a81858561161a565b336000908152609b60205260408120546060919067ffffffffffffffff81111561127a5761127a61250b565b6040519080825280602002602001820160405280156112b357816020015b6112a061210a565b8152602001906001900390816112985790505b50905060005b336000908152609b602052604090205481101561138957336000908152609a60209081526040808320848452825291829020825160e08101845281548152600182015481840152600282015481850152600382015460608083019190915260048301546080830152600583015460a083015284519081018552600683015481526007830154938101939093526008909101549282019290925260c0820152825183908390811061136b5761136b612521565b60200260200101819052508080611381906124f2565b9150506112b9565b50919050565b611397611a27565b6001600160a01b0381166114135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105dc565b61118481611a81565b6001600160a01b0383166114975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b0382166115135760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061158182846124c8565b9392505050565b6001600160a01b03838116600090815260346020908152604080832093861683529290522054600019811461161457818110156116075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105dc565b611614848484840361141c565b50505050565b6001600160a01b0383166116965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b0382166117125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b038316600090815260336020526040902054818110156117a15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118019086815260200190565b60405180910390a3611614565b60006115818284612457565b60208101516000906303c267008261183a826108cd856364a39940611575565b90506000611848828461246a565b611856906364a39940612457565b865160a08801519192509060009061187d906064906108cd90670de0b6b3a764000061194d565b9050600061189860646108cd8c670de0b6b3a764000061194d565b90506000806000806118ae8d6040015142611d3b565b90505b8c604001518b101561192f576118cb888e60200151611d52565b9a506118e06118da8b8a612457565b82611d3b565b9150808b101561192f576118f4828c611575565b935061190387858b888a611d62565b925061190f878461180e565b965061191b8a89612457565b975088611927816124f2565b9950506118b1565b8c5161193b90886124c8565b9e9d5050505050505050505050505050565b6000611581828461246a565b60006115818284612497565b6001600160a01b0382166119bb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105dc565b80603560008282546119cd9190612457565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b6065546001600160a01b03163314610bb35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105dc565b606580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611b675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b03821660009081526033602052604090205481811015611bf65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105dc565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611568565b505050565b600054610100900460ff16611cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105dc565b611a238282611de9565b600054610100900460ff16611d335760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105dc565b610bb3611e6d565b600081831115611d4b5781611581565b5090919050565b600081831015611d4b5781611581565b600080611d7a611d7386600261261b565b8590611959565b9050611d868184611d3b565b90506000611d9382611ee1565b90506000611dad896b033b2e3c9fd0803ce800000061194d565b90506000611dbc82848b611f1a565b90506000611dda6b033b2e3c9fd0803ce80000006108cd8486611575565b9b9a5050505050505050505050565b600054610100900460ff16611e545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105dc565b6036611e608382612675565b506037611c4e8282612675565b600054610100900460ff16611ed85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105dc565b610bb333611a81565b6000610570611ef7670de0b6b3a7640000611f37565b611f15611f0385611f37565b611f106301e13380611f47565b611f5f565b611f90565b6000611f2f84611f2a8585611fee565b612067565b949350505050565b600061057082633b9aca0061209a565b6000610570826b033b2e3c9fd0803ce800000061209a565b600081611f86611f7b856b033b2e3c9fd0803ce800000061209a565b611f15600286612497565b6115819190612497565b600082611f9d8382612457565b91508110156105705760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000060448201526064016105dc565b6000611ffb600283612735565b600003612014576b033b2e3c9fd0803ce8000000612016565b825b9050612023600283612497565b91505b8115610570576120368384612067565b9250612043600283612735565b15612055576120528184612067565b90505b612060600283612497565b9150612026565b60006b033b2e3c9fd0803ce8000000611f86612083858561209a565b611f1560026b033b2e3c9fd0803ce8000000612497565b60008115806120be575082826120b0818361246a565b92506120bc9083612497565b145b6105705760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000060448201526064016105dc565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200161216360405180606001604052806000815260200160008152602001600081525090565b905290565b600060208083528351808285015260005b8181101561219557858101830151858201604001528201612179565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146121cd57600080fd5b919050565b6000602082840312156121e457600080fd5b611581826121b6565b6000806040838503121561220057600080fd5b612209836121b6565b946020939093013593505050565b60006020828403121561222957600080fd5b5035919050565b60008060006060848603121561224557600080fd5b61224e846121b6565b925061225c602085016121b6565b9150604084013590509250925092565b801515811461118457600080fd5b60008060006060848603121561228f57600080fd5b833561229a8161226c565b925060208401356122aa8161226c565b915060408401356122ba8161226c565b809150509250925092565b6000610120820190508882528760208301528660408301528560608301528460808301528360a083015261231060c08301848051825260208082015190830152604090810151910152565b98975050505050505050565b6000806040838503121561232f57600080fd5b50508035926020909101359150565b6000806040838503121561235157600080fd5b61235a836121b6565b9150612368602084016121b6565b90509250929050565b602080825282518282018190526000919060409081850190868401855b828110156124005781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c090810151805191860191909152602081015160e086015260400151610100850152610120909301929085019060010161238e565b5091979650505050505050565b600181811c9082168061242157607f821691505b60208210810361138957634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561057057610570612441565b808202811582820484141761057057610570612441565b634e487b7160e01b600052601260045260246000fd5b6000826124a6576124a6612481565b500490565b6000602082840312156124bd57600080fd5b81516115818161226c565b8181038181111561057057610570612441565b6000816124ea576124ea612441565b506000190190565b60006001820161250457612504612441565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561257257816000190482111561255857612558612441565b8085161561256557918102915b93841c939080029061253c565b509250929050565b60008261258957506001610570565b8161259657506000610570565b81600181146125ac57600281146125b6576125d2565b6001915050610570565b60ff8411156125c7576125c7612441565b50506001821b610570565b5060208310610133831016604e8410600b84101617156125f5575081810a610570565b6125ff8383612537565b806000190482111561261357612613612441565b029392505050565b6000611581838361257a565b601f821115611c4e57600081815260208120601f850160051c8101602086101561264e5750805b601f850160051c820191505b8181101561266d5782815560010161265a565b505050505050565b815167ffffffffffffffff81111561268f5761268f61250b565b6126a38161269d845461240d565b84612627565b602080601f8311600181146126d857600084156126c05750858301515b600019600386901b1c1916600185901b17855561266d565b600085815260208120601f198616915b82811015612707578886015182559484019460019091019084016126e8565b50858210156127255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261274457612744612481565b50069056fea26469706673582212207d536bf83aba80e768e365120ef1ee188ca959384a96356ebe2e7c7d42a7680464736f6c63430008120033