60806040526040518060400160405280600d81526020017f416c6d6967687479204c6f616600000000000000000000000000000000000000815250600190816200004a919062000466565b506040518060400160405280600481526020017f4c4f4146000000000000000000000000000000000000000000000000000000008152506002908162000091919062000466565b506009600360006101000a81548160ff021916908360ff160217905550600360009054906101000a900460ff1660ff166001620000cf9190620006d0565b670de0b6b3a7640000620000e4919062000721565b600455348015620000f457600080fd5b5033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620001de91906200077d565b60405180910390a36200079a565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026e57607f821691505b60208210810362000284576200028362000226565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002af565b620002fa8683620002af565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000347620003416200033b8462000312565b6200031c565b62000312565b9050919050565b6000819050919050565b620003638362000326565b6200037b62000372826200034e565b848454620002bc565b825550505050565b600090565b6200039262000383565b6200039f81848462000358565b505050565b5b81811015620003c757620003bb60008262000388565b600181019050620003a5565b5050565b601f8211156200041657620003e0816200028a565b620003eb846200029f565b81016020851015620003fb578190505b620004136200040a856200029f565b830182620003a4565b50505b505050565b600082821c905092915050565b60006200043b600019846008026200041b565b1980831691505092915050565b600062000456838362000428565b9150826002028217905092915050565b6200047182620001ec565b67ffffffffffffffff8111156200048d576200048c620001f7565b5b62000499825462000255565b620004a6828285620003cb565b600060209050601f831160018114620004de5760008415620004c9578287015190505b620004d5858262000448565b86555062000545565b601f198416620004ee866200028a565b60005b828110156200051857848901518255600182019150602085019450602081019050620004f1565b8683101562000538578489015162000534601f89168262000428565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005db57808604811115620005b357620005b26200054d565b5b6001851615620005c35780820291505b8081029050620005d3856200057c565b945062000593565b94509492505050565b600082620005f65760019050620006c9565b81620006065760009050620006c9565b81600181146200061f57600281146200062a5762000660565b6001915050620006c9565b60ff8411156200063f576200063e6200054d565b5b8360020a9150848211156200065957620006586200054d565b5b50620006c9565b5060208310610133831016604e8410600b84101617156200069a5782820a9050838111156200069457620006936200054d565b5b620006c9565b620006a9848484600162000589565b92509050818404811115620006c357620006c26200054d565b5b81810290505b9392505050565b6000620006dd8262000312565b9150620006ea8362000312565b9250620007197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005e4565b905092915050565b60006200072e8262000312565b91506200073b8362000312565b92508282026200074b8162000312565b915082820484148315176200076557620007646200054d565b5b5092915050565b620007778162000312565b82525050565b60006020820190506200079460008301846200076c565b92915050565b6117a780620007aa6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb14610261578063b4a99a4e14610291578063dd62ed3e146102af578063f2fde38b146102df576100ea565b8063715018a61461020957806395d89b4114610213578063a457c2d714610231576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102fb565b604051610104919061101c565b60405180910390f35b610127600480360381019061012291906110d7565b61038d565b6040516101349190611132565b60405180910390f35b6101456103a4565b604051610152919061115c565b60405180910390f35b61017560048036038101906101709190611177565b6103ae565b6040516101829190611132565b60405180910390f35b6101936104a1565b6040516101a091906111e6565b60405180910390f35b6101c360048036038101906101be91906110d7565b6104b8565b6040516101d09190611132565b60405180910390f35b6101f360048036038101906101ee9190611201565b61055d565b604051610200919061115c565b60405180910390f35b6102116105a6565b005b61021b61067a565b604051610228919061101c565b60405180910390f35b61024b600480360381019061024691906110d7565b61070c565b6040516102589190611132565b60405180910390f35b61027b600480360381019061027691906110d7565b6107b1565b6040516102889190611132565b60405180910390f35b61029961080a565b6040516102a6919061123d565b60405180910390f35b6102c960048036038101906102c49190611258565b610834565b6040516102d6919061115c565b60405180910390f35b6102f960048036038101906102f49190611201565b6108bb565b005b60606001805461030a906112c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610336906112c7565b80156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b600061039a3384846109fe565b6001905092915050565b6000600454905090565b60008082116103f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e990611344565b60405180910390fd5b6103fd848484610ae9565b610496843361049185600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610df790919063ffffffff16565b6109fe565b600190509392505050565b6000600360009054906101000a900460ff16905090565b6000610553338461054e85600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5690919063ffffffff16565b6109fe565b6001905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d906113d6565b60405180910390fd5b6000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054610689906112c7565b80601f01602080910402602001604051908101604052809291908181526020018280546106b5906112c7565b80156107025780601f106106d757610100808354040283529160200191610702565b820191906000526020600020905b8154815290600101906020018083116106e557829003601f168201915b5050505050905090565b60006107a733846107a285600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610df790919063ffffffff16565b6109fe565b6001905092915050565b60008082116107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90611344565b60405180910390fd5b610800338484610ae9565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906113d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190611442565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610adc919061115c565b60405180910390a3505050565b6000610b126064610b04600085610eb490919063ffffffff16565b610f2e90919063ffffffff16565b90506000610b298284610df790919063ffffffff16565b9050610b7d83600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610df790919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c1281600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5690919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cbb82600560007301b31cfe5aeccee219bce4ff7bdf64abf8134ce073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5690919063ffffffff16565b600560007301b31cfe5aeccee219bce4ff7bdf64abf8134ce073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6f919061115c565b60405180910390a37301b31cfe5aeccee219bce4ff7bdf64abf8134ce073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610de8919061115c565b60405180910390a35050505050565b600082821115610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e33906114ae565b60405180910390fd5b60008284610e4a91906114fd565b90508091505092915050565b6000808284610e659190611531565b905083811015610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906115b1565b60405180910390fd5b8091505092915050565b6000808303610ec65760009050610f28565b60008284610ed491906115d1565b9050828482610ee39190611642565b14610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a906116e5565b60405180910390fd5b809150505b92915050565b6000808211610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990611751565b60405180910390fd5b60008284610f809190611642565b90508091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fc6578082015181840152602081019050610fab565b60008484015250505050565b6000601f19601f8301169050919050565b6000610fee82610f8c565b610ff88185610f97565b9350611008818560208601610fa8565b61101181610fd2565b840191505092915050565b600060208201905081810360008301526110368184610fe3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061106e82611043565b9050919050565b61107e81611063565b811461108957600080fd5b50565b60008135905061109b81611075565b92915050565b6000819050919050565b6110b4816110a1565b81146110bf57600080fd5b50565b6000813590506110d1816110ab565b92915050565b600080604083850312156110ee576110ed61103e565b5b60006110fc8582860161108c565b925050602061110d858286016110c2565b9150509250929050565b60008115159050919050565b61112c81611117565b82525050565b60006020820190506111476000830184611123565b92915050565b611156816110a1565b82525050565b6000602082019050611171600083018461114d565b92915050565b6000806000606084860312156111905761118f61103e565b5b600061119e8682870161108c565b93505060206111af8682870161108c565b92505060406111c0868287016110c2565b9150509250925092565b600060ff82169050919050565b6111e0816111ca565b82525050565b60006020820190506111fb60008301846111d7565b92915050565b6000602082840312156112175761121661103e565b5b60006112258482850161108c565b91505092915050565b61123781611063565b82525050565b6000602082019050611252600083018461122e565b92915050565b6000806040838503121561126f5761126e61103e565b5b600061127d8582860161108c565b925050602061128e8582860161108c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112df57607f821691505b6020821081036112f2576112f1611298565b5b50919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b600061132e602083610f97565b9150611339826112f8565b602082019050919050565b6000602082019050818103600083015261135d81611321565b9050919050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e2063616c6c2074686960008201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b60006113c0602a83610f97565b91506113cb82611364565b604082019050919050565b600060208201905081810360008301526113ef816113b3565b9050919050565b7f496e76616c6964206e6577206f776e6572000000000000000000000000000000600082015250565b600061142c601183610f97565b9150611437826113f6565b602082019050919050565b6000602082019050818103600083015261145b8161141f565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000611498601e83610f97565b91506114a382611462565b602082019050919050565b600060208201905081810360008301526114c78161148b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611508826110a1565b9150611513836110a1565b925082820390508181111561152b5761152a6114ce565b5b92915050565b600061153c826110a1565b9150611547836110a1565b925082820190508082111561155f5761155e6114ce565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061159b601b83610f97565b91506115a682611565565b602082019050919050565b600060208201905081810360008301526115ca8161158e565b9050919050565b60006115dc826110a1565b91506115e7836110a1565b92508282026115f5816110a1565b9150828204841483151761160c5761160b6114ce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061164d826110a1565b9150611658836110a1565b92508261166857611667611613565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006116cf602183610f97565b91506116da82611673565b604082019050919050565b600060208201905081810360008301526116fe816116c2565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b600061173b601a83610f97565b915061174682611705565b602082019050919050565b6000602082019050818103600083015261176a8161172e565b905091905056fea264697066735822122084c226e16796b97d061f7f7372cac3188fd57f6d68b9a40ace08f200b4950e5364736f6c63430008130033