6080604052610457600a55606f600b555f60155f6101000a81548160ff021916908360038111156100335761003261022b565b5b0217905550348015610043575f80fd5b506040518060400160405280601281526020017f50617261676f6e204c6f6f7420426f78657300000000000000000000000000008152506040518060400160405280600381526020017f504c420000000000000000000000000000000000000000000000000000000000815250815f90816100be9190610492565b5080600190816100ce9190610492565b5050506100ed6100e261011a60201b60201c565b61012160201b60201c565b604051806060016040528060368152602001614b2860369139600990816101149190610492565b50610561565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426008819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102d357607f821691505b6020821081036102e6576102e561028f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261030d565b610352868361030d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61039661039161038c8461036a565b610373565b61036a565b9050919050565b5f819050919050565b6103af8361037c565b6103c36103bb8261039d565b848454610319565b825550505050565b5f90565b6103d76103cb565b6103e28184846103a6565b505050565b5b81811015610405576103fa5f826103cf565b6001810190506103e8565b5050565b601f82111561044a5761041b816102ec565b610424846102fe565b81016020851015610433578190505b61044761043f856102fe565b8301826103e7565b50505b505050565b5f82821c905092915050565b5f61046a5f198460080261044f565b1980831691505092915050565b5f610482838361045b565b9150826002028217905092915050565b61049b82610258565b67ffffffffffffffff8111156104b4576104b3610262565b5b6104be82546102bc565b6104c9828285610409565b5f60209050601f8311600181146104fa575f84156104e8578287015190505b6104f28582610477565b865550610559565b601f198416610508866102ec565b5f5b8281101561052f5784890151825560018201915060208501945060208101905061050a565b8683101561054c5784890151610548601f89168261045b565b8355505b6001600288020188555050505b505050505050565b6145ba8061056e5f395ff3fe608060405234801561000f575f80fd5b5060043610610246575f3560e01c80638da5cb5b11610139578063c87b56dd116100b6578063f20423141161007a578063f2042314146106c6578063f2fde38b146106e4578063f487404f14610700578063f9c957d81461071e578063fe60d12c1461073a57610246565b8063c87b56dd1461060c578063d371f76b1461063c578063d5abeb011461065a578063e921dad214610678578063e985e9c51461069657610246565b8063ab81e062116100fd578063ab81e0621461056a578063ad8c3f3314610586578063b2422232146105a2578063b88d4fde146105d2578063c051e38a146105ee57610246565b80638da5cb5b146104d857806395d89b41146104f6578063a06cb71914610514578063a22cb46514610530578063a2309ff81461054c57610246565b806335d5959a116101c75780636352211e1161018b5780636352211e146104205780636c0360eb1461045057806370a082311461046e578063715018a61461049e578063893807aa146104a857610246565b806335d5959a146103905780633c186018146103ac57806342842e0e146103ca5780634f297ccc146103e657806355f804b31461040457610246565b80630bb862d11161020e5780630bb862d11461030057806316f9b7071461031c57806323b872dd146103385780632dc7b8551461035457806332f4681c1461037257610246565b806301ffc9a71461024a57806306fdde031461027a578063081812fc14610298578063084520b4146102c8578063095ea7b3146102e4575b5f80fd5b610264600480360381019061025f9190612aee565b610758565b6040516102719190612b33565b60405180910390f35b610282610839565b60405161028f9190612bbc565b60405180910390f35b6102b260048036038101906102ad9190612c0f565b6108c8565b6040516102bf9190612c79565b60405180910390f35b6102e260048036038101906102dd9190612cbc565b61090a565b005b6102fe60048036038101906102f99190612cbc565b610a2e565b005b61031a60048036038101906103159190612c0f565b610b44565b005b61033660048036038101906103319190612c0f565b610bfe565b005b610352600480360381019061034d9190612cfa565b610c84565b005b61035c610ce4565b6040516103699190612d62565b60405180910390f35b61037a610cea565b6040516103879190612d8a565b60405180910390f35b6103aa60048036038101906103a59190612dcd565b610cf0565b005b6103b4610d76565b6040516103c19190612d8a565b60405180910390f35b6103e460048036038101906103df9190612cfa565b610d9a565b005b6103ee610db9565b6040516103fb9190612d8a565b60405180910390f35b61041e60048036038101906104199190612f24565b610dbf565b005b61043a60048036038101906104359190612c0f565b610e4e565b6040516104479190612c79565b60405180910390f35b610458610ed2565b6040516104659190612bbc565b60405180910390f35b61048860048036038101906104839190612f6b565b610f5e565b6040516104959190612d8a565b60405180910390f35b6104a6611012565b005b6104c260048036038101906104bd9190612f6b565b611099565b6040516104cf9190612b33565b60405180910390f35b6104e06110b6565b6040516104ed9190612c79565b60405180910390f35b6104fe6110de565b60405161050b9190612bbc565b60405180910390f35b61052e60048036038101906105299190612f6b565b61116e565b005b61054a60048036038101906105459190612fc0565b611261565b005b610554611277565b6040516105619190612d8a565b60405180910390f35b610584600480360381019061057f919061305b565b611287565b005b6105a0600480360381019061059b9190612dcd565b611770565b005b6105bc60048036038101906105b79190612f6b565b6117f6565b6040516105c99190612b33565b60405180910390f35b6105ec60048036038101906105e79190613156565b611813565b005b6105f6611875565b6040516106039190613249565b60405180910390f35b61062660048036038101906106219190612c0f565b611887565b6040516106339190612bbc565b60405180910390f35b610644611931565b6040516106519190612d8a565b60405180910390f35b610662611941565b60405161066f9190612d8a565b60405180910390f35b610680611947565b60405161068d9190612d62565b60405180910390f35b6106b060048036038101906106ab9190613262565b61194d565b6040516106bd9190612b33565b60405180910390f35b6106ce6119db565b6040516106db9190612d8a565b60405180910390f35b6106fe60048036038101906106f99190612f6b565b6119eb565b005b610708611ae1565b6040516107159190612c79565b60405180910390f35b61073860048036038101906107339190612c0f565b611b09565b005b610742611b8f565b60405161074f9190612d8a565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610832575061083182611b95565b5b9050919050565b60605f8054610847906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906132cd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b5f6108d282611bfe565b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610912611c49565b73ffffffffffffffffffffffffffffffffffffffff166109306110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d90613347565b60405180910390fd5b600b54600c54826109979190613392565b11156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf9061340f565b60405180910390fd5b5f5b81811015610a11575f6109ed6012611c50565b90506109f96012611c5c565b610a038482611c70565b8180600101925050506109da565b5080600c5f828254610a239190613392565b925050819055505050565b5f610a3882610e4e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f9061349d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac7611c49565b73ffffffffffffffffffffffffffffffffffffffff161480610af65750610af581610af0611c49565b61194d565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c9061352b565b60405180910390fd5b610b3f8383611c8d565b505050565b610b4c611c49565b73ffffffffffffffffffffffffffffffffffffffff16610b6a6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613347565b60405180910390fd5b806003811115610bd357610bd26131d6565b5b60155f6101000a81548160ff02191690836003811115610bf657610bf56131d6565b5b021790555050565b610c06611c49565b73ffffffffffffffffffffffffffffffffffffffff16610c246110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613347565b60405180910390fd5b80600b8190555050565b610c95610c8f611c49565b82611d43565b610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb906135b9565b60405180910390fd5b610cdf838383611e1f565b505050565b600e5481565b600d5481565b610cf8611c49565b73ffffffffffffffffffffffffffffffffffffffff16610d166110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613347565b60405180910390fd5b80600e8190555050565b5f610d816014611c50565b610d8b6013611c50565b610d959190613392565b905090565b610db483838360405180602001604052805f815250611813565b505050565b600c5481565b610dc7611c49565b73ffffffffffffffffffffffffffffffffffffffff16610de56110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3290613347565b60405180910390fd5b8060099081610e4a9190613774565b5050565b5f80610e598361211d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061388d565b60405180910390fd5b80915050919050565b60098054610edf906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b906132cd565b8015610f565780601f10610f2d57610100808354040283529160200191610f56565b820191905f5260205f20905b815481529060010190602001808311610f3957829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc49061391b565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61101a611c49565b73ffffffffffffffffffffffffffffffffffffffff166110386110b6565b73ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613347565b60405180910390fd5b6110975f612156565b565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110ed906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611119906132cd565b80156111645780601f1061113b57610100808354040283529160200191611164565b820191905f5260205f20905b81548152906001019060200180831161114757829003601f168201915b5050505050905090565b600380811115611181576111806131d6565b5b60155f9054906101000a900460ff1660038111156111a2576111a16131d6565b5b146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990613983565b60405180910390fd5b600b54600a546111f291906139a1565b6111fc6012611c50565b1061123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613a44565b60405180910390fd5b5f6112476012611c50565b90506112536012611c5c565b61125d8282611c70565b5050565b61127361126c611c49565b8383612260565b5050565b5f6112826012611c50565b905090565b6001600381111561129b5761129a6131d6565b5b60155f9054906101000a900460ff1660038111156112bc576112bb6131d6565b5b14806112fa5750600260038111156112d7576112d66131d6565b5b60155f9054906101000a900460ff1660038111156112f8576112f76131d6565b5b145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613aac565b60405180910390fd5b600a546113466012611c50565b10611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90613b14565b60405180910390fd5b5f836040516020016113989190613b77565b6040516020818303038152906040528051906020012090505f600160038111156113c5576113c46131d6565b5b60155f9054906101000a900460ff1660038111156113e6576113e56131d6565b5b0361152a57600e5490505f151560105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615151461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613c01565b60405180910390fd5b600d5461148a6119db565b106114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613c69565b60405180910390fd5b6114d46013611c5c565b600160105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b6002600381111561153e5761153d6131d6565b5b60155f9054906101000a900460ff16600381111561155f5761155e6131d6565b5b036116bd57600f5490505f151560115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613cf7565b60405180910390fd5b600d54600b54600a5461160b91906139a1565b61161591906139a1565b61161d611931565b1061165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613d5f565b60405180910390fd5b6116676014611c5c565b600160115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b6117088484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505082846123c7565b611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e90613dc7565b60405180910390fd5b5f6117526012611c50565b905061175e6012611c5c565b6117688682611c70565b505050505050565b611778611c49565b73ffffffffffffffffffffffffffffffffffffffff166117966110b6565b73ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390613347565b60405180910390fd5b80600f8190555050565b6010602052805f5260405f205f915054906101000a900460ff1681565b61182461181e611c49565b83611d43565b611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a906135b9565b60405180910390fd5b61186f848484846123dd565b50505050565b60155f9054906101000a900460ff1681565b60606118936012611c50565b8211156118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc90613e2f565b60405180910390fd5b5f600980546118e3906132cd565b9050116118fe5760405180602001604052805f81525061192a565b600961190983612439565b60405160200161191a929190613f2d565b6040516020818303038152906040525b9050919050565b5f61193c6014611c50565b905090565b600a5481565b600f5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6119e66013611c50565b905090565b6119f3611c49565b73ffffffffffffffffffffffffffffffffffffffff16611a116110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e90613347565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613fcf565b60405180910390fd5b611ade81612156565b50565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b11611c49565b73ffffffffffffffffffffffffffffffffffffffff16611b2f6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90613347565b60405180910390fd5b80600d8190555050565b600b5481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c0781612592565b611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d9061388d565b60405180910390fd5b50565b5f33905090565b5f815f01549050919050565b6001815f015f828254019250508190555050565b611c89828260405180602001604052805f8152506125d2565b5050565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cfd83610e4e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611d4d82612592565b611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d839061405d565b60405180910390fd5b5f611d9683610e4e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dd85750611dd7818561194d565b5b80611e1657508373ffffffffffffffffffffffffffffffffffffffff16611dfe846108c8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e3f82610e4e565b73ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c906140eb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614179565b60405180910390fd5b611f10838383600161262c565b8273ffffffffffffffffffffffffffffffffffffffff16611f3082610e4e565b73ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d906140eb565b60405180910390fd5b60045f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461200691906139a1565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461205a9190613392565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121188383836001612632565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426008819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c5906141e1565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ba9190612b33565b60405180910390a3505050565b5f826123d38584612638565b1490509392505050565b6123e8848484611e1f565b6123f4848484846126e2565b612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a9061426f565b60405180910390fd5b50505050565b60605f820361247f576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061258d565b5f8290505f5b5f82146124ae5780806124979061428d565b915050600a826124a79190614301565b9150612485565b5f8167ffffffffffffffff8111156124c9576124c8612e00565b5b6040519080825280601f01601f1916602001820160405280156124fb5781602001600182028036833780820191505090505b5090505b5f85146125865760018261251391906139a1565b9150600a856125229190614331565b603061252e9190613392565b60f81b81838151811061254457612543614361565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561257f9190614301565b94506124ff565b8093505050505b919050565b5f8073ffffffffffffffffffffffffffffffffffffffff166125b38361211d565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6125dc8383612864565b6125e85f8484846126e2565b612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e9061426f565b60405180910390fd5b505050565b50505050565b50505050565b5f808290505f5b84518110156126d7575f85828151811061265c5761265b614361565b5b6020026020010151905080831161269d5782816040516020016126809291906143ae565b6040516020818303038152906040528051906020012092506126c9565b80836040516020016126b09291906143ae565b6040516020818303038152906040528051906020012092505b50808060010191505061263f565b508091505092915050565b5f6127028473ffffffffffffffffffffffffffffffffffffffff16612a77565b15612857578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261272b611c49565b8786866040518563ffffffff1660e01b815260040161274d949392919061442b565b6020604051808303815f875af192505050801561278857506040513d601f19601f820116820180604052508101906127859190614489565b60015b612807573d805f81146127b6576040519150601f19603f3d011682016040523d82523d5f602084013e6127bb565b606091505b505f8151036127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f69061426f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061285c565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c9906144fe565b60405180910390fd5b6128db81612592565b1561291b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291290614566565b60405180910390fd5b6129285f8383600161262c565b61293181612592565b15612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890614566565b60405180910390fd5b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a735f83836001612632565b5050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612acd81612a99565b8114612ad7575f80fd5b50565b5f81359050612ae881612ac4565b92915050565b5f60208284031215612b0357612b02612a91565b5b5f612b1084828501612ada565b91505092915050565b5f8115159050919050565b612b2d81612b19565b82525050565b5f602082019050612b465f830184612b24565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b8e82612b4c565b612b988185612b56565b9350612ba8818560208601612b66565b612bb181612b74565b840191505092915050565b5f6020820190508181035f830152612bd48184612b84565b905092915050565b5f819050919050565b612bee81612bdc565b8114612bf8575f80fd5b50565b5f81359050612c0981612be5565b92915050565b5f60208284031215612c2457612c23612a91565b5b5f612c3184828501612bfb565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c6382612c3a565b9050919050565b612c7381612c59565b82525050565b5f602082019050612c8c5f830184612c6a565b92915050565b612c9b81612c59565b8114612ca5575f80fd5b50565b5f81359050612cb681612c92565b92915050565b5f8060408385031215612cd257612cd1612a91565b5b5f612cdf85828601612ca8565b9250506020612cf085828601612bfb565b9150509250929050565b5f805f60608486031215612d1157612d10612a91565b5b5f612d1e86828701612ca8565b9350506020612d2f86828701612ca8565b9250506040612d4086828701612bfb565b9150509250925092565b5f819050919050565b612d5c81612d4a565b82525050565b5f602082019050612d755f830184612d53565b92915050565b612d8481612bdc565b82525050565b5f602082019050612d9d5f830184612d7b565b92915050565b612dac81612d4a565b8114612db6575f80fd5b50565b5f81359050612dc781612da3565b92915050565b5f60208284031215612de257612de1612a91565b5b5f612def84828501612db9565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e3682612b74565b810181811067ffffffffffffffff82111715612e5557612e54612e00565b5b80604052505050565b5f612e67612a88565b9050612e738282612e2d565b919050565b5f67ffffffffffffffff821115612e9257612e91612e00565b5b612e9b82612b74565b9050602081019050919050565b828183375f83830152505050565b5f612ec8612ec384612e78565b612e5e565b905082815260208101848484011115612ee457612ee3612dfc565b5b612eef848285612ea8565b509392505050565b5f82601f830112612f0b57612f0a612df8565b5b8135612f1b848260208601612eb6565b91505092915050565b5f60208284031215612f3957612f38612a91565b5b5f82013567ffffffffffffffff811115612f5657612f55612a95565b5b612f6284828501612ef7565b91505092915050565b5f60208284031215612f8057612f7f612a91565b5b5f612f8d84828501612ca8565b91505092915050565b612f9f81612b19565b8114612fa9575f80fd5b50565b5f81359050612fba81612f96565b92915050565b5f8060408385031215612fd657612fd5612a91565b5b5f612fe385828601612ca8565b9250506020612ff485828601612fac565b9150509250929050565b5f80fd5b5f80fd5b5f8083601f84011261301b5761301a612df8565b5b8235905067ffffffffffffffff81111561303857613037612ffe565b5b60208301915083602082028301111561305457613053613002565b5b9250929050565b5f805f6040848603121561307257613071612a91565b5b5f61307f86828701612ca8565b935050602084013567ffffffffffffffff8111156130a05761309f612a95565b5b6130ac86828701613006565b92509250509250925092565b5f67ffffffffffffffff8211156130d2576130d1612e00565b5b6130db82612b74565b9050602081019050919050565b5f6130fa6130f5846130b8565b612e5e565b90508281526020810184848401111561311657613115612dfc565b5b613121848285612ea8565b509392505050565b5f82601f83011261313d5761313c612df8565b5b813561314d8482602086016130e8565b91505092915050565b5f805f806080858703121561316e5761316d612a91565b5b5f61317b87828801612ca8565b945050602061318c87828801612ca8565b935050604061319d87828801612bfb565b925050606085013567ffffffffffffffff8111156131be576131bd612a95565b5b6131ca87828801613129565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60048110613214576132136131d6565b5b50565b5f81905061322482613203565b919050565b5f61323382613217565b9050919050565b61324381613229565b82525050565b5f60208201905061325c5f83018461323a565b92915050565b5f806040838503121561327857613277612a91565b5b5f61328585828601612ca8565b925050602061329685828601612ca8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132e457607f821691505b6020821081036132f7576132f66132a0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613331602083612b56565b915061333c826132fd565b602082019050919050565b5f6020820190508181035f83015261335e81613325565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61339c82612bdc565b91506133a783612bdc565b92508282019050808211156133bf576133be613365565b5b92915050565b7f416d6f756e74206578636565647320726573657276656420737570706c7900005f82015250565b5f6133f9601e83612b56565b9150613404826133c5565b602082019050919050565b5f6020820190508181035f830152613426816133ed565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f613487602183612b56565b91506134928261342d565b604082019050919050565b5f6020820190508181035f8301526134b48161347b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f613515603d83612b56565b9150613520826134bb565b604082019050919050565b5f6020820190508181035f83015261354281613509565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f6135a3602d83612b56565b91506135ae82613549565b604082019050919050565b5f6020820190508181035f8301526135d081613597565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135f8565b61363d86836135f8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61367861367361366e84612bdc565b613655565b612bdc565b9050919050565b5f819050919050565b6136918361365e565b6136a561369d8261367f565b848454613604565b825550505050565b5f90565b6136b96136ad565b6136c4818484613688565b505050565b5b818110156136e7576136dc5f826136b1565b6001810190506136ca565b5050565b601f82111561372c576136fd816135d7565b613706846135e9565b81016020851015613715578190505b613729613721856135e9565b8301826136c9565b50505b505050565b5f82821c905092915050565b5f61374c5f1984600802613731565b1980831691505092915050565b5f613764838361373d565b9150826002028217905092915050565b61377d82612b4c565b67ffffffffffffffff81111561379657613795612e00565b5b6137a082546132cd565b6137ab8282856136eb565b5f60209050601f8311600181146137dc575f84156137ca578287015190505b6137d48582613759565b86555061383b565b601f1984166137ea866135d7565b5f5b82811015613811578489015182556001820191506020850194506020810190506137ec565b8683101561382e578489015161382a601f89168261373d565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f613877601883612b56565b915061388282613843565b602082019050919050565b5f6020820190508181035f8301526138a48161386b565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f613905602983612b56565b9150613910826138ab565b604082019050919050565b5f6020820190508181035f830152613932816138f9565b9050919050565b7f5075626c6963206d696e7420696e6163746976650000000000000000000000005f82015250565b5f61396d601483612b56565b915061397882613939565b602082019050919050565b5f6020820190508181035f83015261399a81613961565b9050919050565b5f6139ab82612bdc565b91506139b683612bdc565b92508282039050818111156139ce576139cd613365565b5b92915050565b7f4d617820617661696c61626c65207075626c696320737570706c79206d696e745f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a2e602283612b56565b9150613a39826139d4565b604082019050919050565b5f6020820190508181035f830152613a5b81613a22565b9050919050565b7f4e6f7420696e20616c6c6f776c697374206d696e74696e6720737461746573005f82015250565b5f613a96601f83612b56565b9150613aa182613a62565b602082019050919050565b5f6020820190508181035f830152613ac381613a8a565b9050919050565b7f4d617820737570706c79206d696e7465640000000000000000000000000000005f82015250565b5f613afe601183612b56565b9150613b0982613aca565b602082019050919050565b5f6020820190508181035f830152613b2b81613af2565b9050919050565b5f8160601b9050919050565b5f613b4882613b32565b9050919050565b5f613b5982613b3e565b9050919050565b613b71613b6c82612c59565b613b4f565b82525050565b5f613b828284613b60565b60148201915081905092915050565b7f5573657220616c7265616479206d696e746564206f6e2067756172616e7465655f8201527f64206c6973740000000000000000000000000000000000000000000000000000602082015250565b5f613beb602683612b56565b9150613bf682613b91565b604082019050919050565b5f6020820190508181035f830152613c1881613bdf565b9050919050565b7f4d61782067756172616e7465656420737570706c79206d696e746564000000005f82015250565b5f613c53601c83612b56565b9150613c5e82613c1f565b602082019050919050565b5f6020820190508181035f830152613c8081613c47565b9050919050565b7f5573657220616c7265616479206d696e746564206f6e206f76657273756273635f8201527f7269626564206c69737400000000000000000000000000000000000000000000602082015250565b5f613ce1602a83612b56565b9150613cec82613c87565b604082019050919050565b5f6020820190508181035f830152613d0e81613cd5565b9050919050565b7f4d617820616c6c6f77206c69737420737570706c79206d696e746564000000005f82015250565b5f613d49601c83612b56565b9150613d5482613d15565b602082019050919050565b5f6020820190508181035f830152613d7681613d3d565b9050919050565b7f496e76616c69642070726f6f66000000000000000000000000000000000000005f82015250565b5f613db1600d83612b56565b9150613dbc82613d7d565b602082019050919050565b5f6020820190508181035f830152613dde81613da5565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e005f82015250565b5f613e19601f83612b56565b9150613e2482613de5565b602082019050919050565b5f6020820190508181035f830152613e4681613e0d565b9050919050565b5f81905092915050565b5f8154613e63816132cd565b613e6d8186613e4d565b9450600182165f8114613e875760018114613e9c57613ece565b60ff1983168652811515820286019350613ece565b613ea5856135d7565b5f5b83811015613ec657815481890152600182019150602081019050613ea7565b838801955050505b50505092915050565b5f613ee182612b4c565b613eeb8185613e4d565b9350613efb818560208601612b66565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b5f613f388285613e57565b9150613f448284613ed7565b9150613f4f82613f07565b6005820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613fb9602683612b56565b9150613fc482613f5f565b604082019050919050565b5f6020820190508181035f830152613fe681613fad565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f614047602c83612b56565b915061405282613fed565b604082019050919050565b5f6020820190508181035f8301526140748161403b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f6140d5602583612b56565b91506140e08261407b565b604082019050919050565b5f6020820190508181035f830152614102816140c9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614163602483612b56565b915061416e82614109565b604082019050919050565b5f6020820190508181035f83015261419081614157565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6141cb601983612b56565b91506141d682614197565b602082019050919050565b5f6020820190508181035f8301526141f8816141bf565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f614259603283612b56565b9150614264826141ff565b604082019050919050565b5f6020820190508181035f8301526142868161424d565b9050919050565b5f61429782612bdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142c9576142c8613365565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61430b82612bdc565b915061431683612bdc565b925082614326576143256142d4565b5b828204905092915050565b5f61433b82612bdc565b915061434683612bdc565b925082614356576143556142d4565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b6143a86143a382612d4a565b61438e565b82525050565b5f6143b98285614397565b6020820191506143c98284614397565b6020820191508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6143fd826143d9565b61440781856143e3565b9350614417818560208601612b66565b61442081612b74565b840191505092915050565b5f60808201905061443e5f830187612c6a565b61444b6020830186612c6a565b6144586040830185612d7b565b818103606083015261446a81846143f3565b905095945050505050565b5f8151905061448381612ac4565b92915050565b5f6020828403121561449e5761449d612a91565b5b5f6144ab84828501614475565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6144e8602083612b56565b91506144f3826144b4565b602082019050919050565b5f6020820190508181035f830152614515816144dc565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f614550601c83612b56565b915061455b8261451c565b602082019050919050565b5f6020820190508181035f83015261457d81614544565b905091905056fea264697066735822122051e3f58633170c1dc3d81eab7b769cf11aa9008c6941f3c3c83a8f50d95ffa5e64736f6c634300081a0033697066733a2f2f516d65464a3654506e764a6336583664794b31786a5272315444624e57387674754a75765472566a6b56384859582f