From f662d9933fbf8fb0501d15cbaabad49d91b1e177 Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Mon, 14 Mar 2022 12:05:26 +0700 Subject: [PATCH] W7 done --- w6/.dockerignore | 3 + w6/Dockerfile | 16 + w6/goods.json | 1097 ++++++++++++++++++++++++++++++++ w6/index.js | 79 +++ w6/package.json | 22 + w6/pnpm-lock.yaml | 1092 +++++++++++++++++++++++++++++++ w6/static/css/styles.css | 154 +++++ w6/templates/categoryPage.html | 31 + w6/templates/goodsPage.html | 35 + w6/templates/mainPage.html | 58 ++ w6/templates/searchPage.html | 62 ++ w6/templates/userPage.html | 42 ++ w6/w6.zip | Bin 0 -> 36436 bytes 13 files changed, 2691 insertions(+) create mode 100644 w6/.dockerignore create mode 100644 w6/Dockerfile create mode 100644 w6/goods.json create mode 100644 w6/index.js create mode 100644 w6/package.json create mode 100644 w6/pnpm-lock.yaml create mode 100644 w6/static/css/styles.css create mode 100644 w6/templates/categoryPage.html create mode 100644 w6/templates/goodsPage.html create mode 100644 w6/templates/mainPage.html create mode 100644 w6/templates/searchPage.html create mode 100644 w6/templates/userPage.html create mode 100644 w6/w6.zip diff --git a/w6/.dockerignore b/w6/.dockerignore new file mode 100644 index 0000000..942162e --- /dev/null +++ b/w6/.dockerignore @@ -0,0 +1,3 @@ +node_modules +Dockerfile +.dockerignore \ No newline at end of file diff --git a/w6/Dockerfile b/w6/Dockerfile new file mode 100644 index 0000000..f3ab6b2 --- /dev/null +++ b/w6/Dockerfile @@ -0,0 +1,16 @@ +FROM node:16.13.2-alpine3.14 + +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +WORKDIR /home/node/app + +COPY --chown=node:node . . + +RUN corepack enable +RUN corepack prepare pnpm@6.32.2 --activate +RUN pnpm install + +USER node + +EXPOSE 9559/tcp + +CMD [ "pnpm", "start" ] \ No newline at end of file diff --git a/w6/goods.json b/w6/goods.json new file mode 100644 index 0000000..9aac740 --- /dev/null +++ b/w6/goods.json @@ -0,0 +1,1097 @@ +{ + "categories": ["home", "hiking", "food", "medication"], + "users": [ + { + "id": 0, + "guid": "cea7d49f-2d27-4c86-9a96-44dd737a485a", + "fullName": "cupidatat ullamco", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 1, + "guid": "4250b2d4-7145-4586-9c80-0a95ce27a40a", + "fullName": "irure ipsum", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 2, + "guid": "b1ee4bf8-5ae7-49f9-9e67-fd3d836b80d2", + "fullName": "pariatur consequat", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 3, + "guid": "b0e436cd-1f1f-4bea-944e-094b3c75ed4d", + "fullName": "aute officia", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 4, + "guid": "beef9ece-fdf6-4a3a-8da6-0dfebea665f6", + "fullName": "exercitation et", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 5, + "guid": "24e36c0e-f246-4edf-a918-8c192e0bd1dc", + "fullName": "ut do", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 6, + "guid": "7f43a153-ca43-4bfc-bfe1-cdca225e553d", + "fullName": "voluptate minim", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 7, + "guid": "7c6c61ee-b08e-43d3-a59a-0c22f455a24a", + "fullName": "reprehenderit non", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 8, + "guid": "779b0292-aa9d-4c43-85f5-6594298a112c", + "fullName": "velit eiusmod", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 9, + "guid": "cf9b23c3-22c6-4a23-af6a-11055b04d412", + "fullName": "irure dolore", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 10, + "guid": "112e024c-a154-4b8a-87b4-1bdec414448e", + "fullName": "laboris non", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 11, + "guid": "295cbe6c-6a9d-4df7-913f-b4a1367b8a8d", + "fullName": "aliquip duis", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 12, + "guid": "6d80fa8f-fc9c-4315-a67b-eab5fc07f990", + "fullName": "commodo officia", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 13, + "guid": "f9bca8f0-5e0b-4d62-98f7-1a16255df2f0", + "fullName": "enim sint", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + }, + { + "id": 14, + "guid": "a59d097c-8aea-4242-a04b-46b5091ceaab", + "fullName": "irure minim", + "photo": "https://api.lorem.space/image/face?w=150&h=150" + } + ], + "goods": [ + { + "id": 0, + "uid": 2, + "guid": "77727dd1-4088-4516-85d9-c2f09f068dcc", + "category": "medication", + "price": 2002.94, + "title": "consectetur consequat", + "description": "Ea pariatur aliquip mollit excepteur veniam mollit commodo velit fugiat duis sit ullamco adipisicing. Minim tempor et mollit et sint quis fugiat. Minim pariatur qui in aliquip duis magna consequat.\r\n", + "registered": "2022-01-19T01:34:58 -07:00" + }, + { + "id": 1, + "uid": 1, + "guid": "1c542c94-05e6-4acd-bc3e-8381b86c9d65", + "category": "home", + "price": 3358.11, + "title": "in magna", + "description": "Magna eiusmod dolore do eiusmod eu commodo anim laboris. Lorem excepteur velit consequat tempor in sit amet ea anim. Commodo do aliquip dolore est aliqua occaecat eiusmod ea eu deserunt laborum commodo pariatur occaecat. Proident culpa ea eu laborum dolor consequat id. Dolore non ut non ipsum do id labore sint voluptate qui excepteur magna anim. Adipisicing mollit consequat qui tempor sit excepteur magna eiusmod. Irure culpa consequat qui Lorem laboris laboris tempor excepteur ut officia dolore mollit.\r\n", + "registered": "2022-02-01T12:45:42 -07:00" + }, + { + "id": 2, + "uid": 13, + "guid": "9e841d52-8ddc-41c5-a4ba-e0eb1c6433f8", + "category": "home", + "price": 2592.23, + "title": "sit consequat", + "description": "Reprehenderit est fugiat consequat ut laboris. Enim velit qui ad voluptate commodo dolore. Labore in irure deserunt irure sint adipisicing Lorem id consectetur. Qui incididunt nostrud excepteur eu mollit exercitation consequat. Sint non officia dolor dolor commodo pariatur sit dolor aute occaecat. Id sint esse aliquip reprehenderit sit. Mollit officia labore consectetur id deserunt anim eu do tempor laborum incididunt.\r\n", + "registered": "2022-01-20T11:48:50 -07:00" + }, + { + "id": 3, + "uid": 12, + "guid": "7d2f1f88-f2be-48ed-b5b7-e15df207f3ab", + "category": "food", + "price": 2485.51, + "title": "eiusmod do", + "description": "Duis est amet magna reprehenderit irure ut elit occaecat anim et deserunt. Irure excepteur nostrud non duis commodo anim cupidatat amet. Exercitation nisi id culpa mollit dolor ullamco elit. Consequat amet irure commodo esse anim est incididunt eu. Qui culpa ullamco ex quis quis proident irure qui sit. Aute laboris laborum velit in anim qui duis dolor.\r\n", + "registered": "2022-01-23T09:44:10 -07:00" + }, + { + "id": 4, + "uid": 15, + "guid": "23d80bcc-a6f5-48e0-9afd-da29cbe5be0e", + "category": "food", + "price": 2525.79, + "title": "nostrud non", + "description": "Exercitation tempor nulla deserunt commodo. Proident ipsum minim in aliquip elit et ipsum amet mollit adipisicing. Et dolor do nostrud enim aliquip tempor ullamco cupidatat ad. Ea aliqua ad aute elit ullamco cupidatat consequat reprehenderit cillum nulla sunt cupidatat.\r\n", + "registered": "2022-01-22T06:07:22 -07:00" + }, + { + "id": 5, + "uid": 6, + "guid": "e515fba9-3b0d-434d-bfc4-1d0ed1dc7566", + "category": "home", + "price": 2119.03, + "title": "ullamco sit", + "description": "Magna eu excepteur nulla amet eiusmod esse. Ad exercitation qui culpa velit do non sunt labore tempor ipsum velit. Consequat irure nulla voluptate ad magna qui ad esse ut officia laboris occaecat reprehenderit dolore. Incididunt nisi dolore id dolor consequat mollit. Amet quis nostrud Lorem excepteur et.\r\n", + "registered": "2022-01-20T07:08:16 -07:00" + }, + { + "id": 6, + "uid": 7, + "guid": "28ffb17c-38eb-4da4-a4d5-eb7879273e27", + "category": "home", + "price": 1366.91, + "title": "id labore", + "description": "Elit do proident do veniam occaecat aliqua dolore nisi occaecat exercitation. Labore cillum deserunt eiusmod ut exercitation anim minim veniam et amet elit consectetur. Labore magna occaecat qui ut laboris. Culpa elit mollit magna aute Lorem officia deserunt consequat dolor consectetur nulla nulla proident sunt. Laboris excepteur non minim id eu esse elit elit consectetur anim ut. Et mollit occaecat nostrud duis in anim adipisicing sint commodo nisi enim quis reprehenderit non. Ad veniam sint aute sint nulla.\r\n", + "registered": "2022-01-18T06:27:33 -07:00" + }, + { + "id": 7, + "uid": 10, + "guid": "98ba8357-4bae-48a4-9a9c-36bb43222ce9", + "category": "home", + "price": 1804.73, + "title": "voluptate tempor", + "description": "Id qui pariatur non ad enim in excepteur eu. Ea laboris tempor magna ea velit labore ad eiusmod deserunt veniam esse ipsum proident dolore. Culpa et labore commodo consequat ex Lorem aliquip est sint laboris Lorem voluptate. In dolore fugiat amet minim consectetur aute.\r\n", + "registered": "2022-02-05T02:19:23 -07:00" + }, + { + "id": 8, + "uid": 4, + "guid": "def79a73-79e3-40af-aa2e-2266de2e52a9", + "category": "medication", + "price": 3284.5, + "title": "laboris eiusmod", + "description": "Dolore sint consequat labore velit pariatur pariatur deserunt aliqua. Id in ipsum anim aliqua reprehenderit ea sint nulla consequat. Lorem est cillum esse laborum consequat. Laborum aliqua do commodo proident velit laboris esse cillum voluptate duis ea. Mollit sit irure cupidatat excepteur cillum sunt veniam nulla nulla aute amet. Lorem velit culpa eiusmod anim magna ea. Pariatur et sunt officia in culpa minim quis ad exercitation.\r\n", + "registered": "2022-01-25T08:57:42 -07:00" + }, + { + "id": 9, + "uid": 2, + "guid": "6fa6cd5e-b304-4233-a609-6a647d9096a8", + "category": "medication", + "price": 2628.4, + "title": "quis officia", + "description": "Deserunt proident ea dolor cillum laborum occaecat laboris exercitation nisi. Cupidatat sunt dolor ipsum commodo aliqua minim excepteur cillum eiusmod sit laborum nostrud aute aute. Est ea amet aliqua aute adipisicing nostrud ad irure aute magna. Deserunt duis sunt ex commodo dolor eu qui et ad anim id irure ipsum. Nostrud non id aliquip dolore in aliquip sit consequat reprehenderit. Do aliqua nisi et proident eiusmod aute deserunt eu mollit amet ad. Velit ea adipisicing adipisicing ex in laboris proident ullamco nisi anim sit ut elit.\r\n", + "registered": "2022-01-19T03:08:43 -07:00" + }, + { + "id": 10, + "uid": 4, + "guid": "0dd4736e-3d6a-47a7-be90-f5453137c63b", + "category": "home", + "price": 2115.87, + "title": "nisi ipsum", + "description": "In in incididunt quis eiusmod eu id tempor. Minim voluptate velit veniam nulla ea ut. Eiusmod id duis tempor non pariatur proident ad anim voluptate quis ullamco.\r\n", + "registered": "2022-01-31T05:29:02 -07:00" + }, + { + "id": 11, + "uid": 15, + "guid": "2b1ca4e1-171b-4e3e-80e3-cec374a7bd51", + "category": "food", + "price": 3890.08, + "title": "eiusmod in", + "description": "Irure ipsum elit occaecat dolore tempor et mollit ad magna. Nostrud laboris qui nisi ea occaecat consequat exercitation duis ea anim dolor nisi. Occaecat id aliqua commodo enim sit Lorem. Culpa sit sunt dolore in veniam veniam id sunt commodo magna sit pariatur. Cillum labore nulla excepteur amet in nulla.\r\n", + "registered": "2022-01-15T08:59:55 -07:00" + }, + { + "id": 12, + "uid": 0, + "guid": "889dd01c-2df0-4229-9e88-83d8cbf98314", + "category": "food", + "price": 2390.75, + "title": "enim minim", + "description": "Amet ut tempor dolor laboris et non. Ad ullamco fugiat adipisicing sunt minim velit culpa fugiat labore anim duis. Nostrud Lorem adipisicing id aute enim aute sit pariatur reprehenderit. Anim adipisicing labore sit eu do incididunt commodo. Quis deserunt consequat tempor sint reprehenderit dolore fugiat. Nostrud irure dolor reprehenderit mollit eu. Consequat et voluptate excepteur ullamco adipisicing eiusmod sit sit mollit sint magna eu.\r\n", + "registered": "2022-01-30T07:08:31 -07:00" + }, + { + "id": 13, + "uid": 6, + "guid": "dfe249ff-2466-4321-8438-f55d490aacf9", + "category": "hiking", + "price": 3531.76, + "title": "ad dolor", + "description": "Excepteur elit consectetur cillum Lorem eu laboris laboris culpa laborum laboris elit velit. Ut eu occaecat excepteur et reprehenderit nulla ipsum ad aute eiusmod non nisi nisi est. Nisi laborum minim ad aliquip laboris reprehenderit laborum. Adipisicing veniam est officia qui Lorem excepteur deserunt sunt eiusmod. Eu Lorem mollit aliqua Lorem ut sunt in nisi voluptate ipsum voluptate magna incididunt velit. Eu reprehenderit ipsum ea dolore sint quis nulla incididunt tempor sint incididunt sunt quis. Cillum voluptate proident officia aliqua pariatur.\r\n", + "registered": "2022-01-15T02:25:04 -07:00" + }, + { + "id": 14, + "uid": 9, + "guid": "d4fbbff9-0850-46d1-a097-4f9ef0ecbc43", + "category": "home", + "price": 2599.05, + "title": "dolore et", + "description": "Tempor sit ullamco aute pariatur ullamco. Occaecat quis tempor reprehenderit sint sit incididunt reprehenderit consequat velit Lorem occaecat voluptate aliqua. Occaecat do minim laboris officia nisi. Ullamco commodo ea amet dolor quis voluptate ut et.\r\n", + "registered": "2022-02-02T05:36:22 -07:00" + }, + { + "id": 15, + "uid": 11, + "guid": "cc557bb9-e9ae-4da2-acbf-140504952abd", + "category": "medication", + "price": 2093.4, + "title": "eu sit", + "description": "Anim pariatur voluptate dolor exercitation ad et deserunt est velit officia ipsum. Duis ut culpa esse nostrud. Veniam voluptate exercitation laborum deserunt nostrud dolor. Amet culpa aliquip mollit deserunt in. Reprehenderit ipsum eiusmod qui duis esse sint minim occaecat enim mollit.\r\n", + "registered": "2022-01-19T03:56:37 -07:00" + }, + { + "id": 16, + "uid": 3, + "guid": "5f5585a0-ef34-4b69-9163-02407d3bcc62", + "category": "hiking", + "price": 1060.1, + "title": "officia voluptate", + "description": "Amet esse excepteur deserunt aute nulla ea esse aliqua eu minim ipsum ex. Id irure et reprehenderit elit do ullamco tempor esse ullamco enim aliqua. Lorem in adipisicing nisi veniam consequat qui reprehenderit dolore eiusmod ea magna. Occaecat ad est fugiat qui cupidatat laborum et.\r\n", + "registered": "2022-01-14T02:42:28 -07:00" + }, + { + "id": 17, + "uid": 6, + "guid": "f2194da4-2c77-4ee6-83c7-2599229d2447", + "category": "food", + "price": 2257.79, + "title": "et laboris", + "description": "Esse voluptate dolor esse velit duis est est. Eiusmod cupidatat aliqua aliquip laborum occaecat mollit occaecat et. Officia esse qui ut pariatur pariatur eu dolor est amet eu.\r\n", + "registered": "2022-02-08T06:43:47 -07:00" + }, + { + "id": 18, + "uid": 13, + "guid": "b7aa2dfb-dc66-4360-8979-e59cb69f2ba6", + "category": "hiking", + "price": 1095.77, + "title": "dolor aliquip", + "description": "Anim id adipisicing aliqua sint qui nisi ullamco commodo exercitation eu dolor. Reprehenderit exercitation voluptate eu quis. Veniam non amet officia amet in velit.\r\n", + "registered": "2022-02-16T11:58:48 -07:00" + }, + { + "id": 19, + "uid": 15, + "guid": "a7f9257f-785b-4f0e-8977-ab0c7065f1ec", + "category": "hiking", + "price": 2702.64, + "title": "est est", + "description": "Eu nisi dolore esse minim fugiat sunt adipisicing amet ad veniam non. Tempor magna exercitation occaecat in amet magna ex aliqua sint quis anim sint nostrud tempor. Officia aliquip dolor voluptate magna tempor ut ipsum nulla labore do elit. Pariatur magna est et fugiat eu magna fugiat aute non et tempor quis occaecat. Magna duis veniam labore irure aliqua incididunt pariatur ad sint aliqua voluptate. Consectetur reprehenderit dolore ipsum veniam amet veniam ad ipsum ea occaecat. Tempor irure tempor voluptate dolor velit excepteur sit ullamco non proident.\r\n", + "registered": "2022-01-26T07:43:07 -07:00" + }, + { + "id": 20, + "uid": 3, + "guid": "3b67860e-c319-4fb2-80c7-3904c76733e2", + "category": "home", + "price": 2090.43, + "title": "quis occaecat", + "description": "Nostrud ex velit minim do enim. Aliqua dolore sit minim pariatur. Voluptate excepteur sunt ex amet dolor aliquip dolor dolor aliquip irure officia eiusmod nostrud excepteur.\r\n", + "registered": "2022-02-18T09:28:32 -07:00" + }, + { + "id": 21, + "uid": 9, + "guid": "9e50f163-44f0-4328-9828-aa7dd6f2418a", + "category": "hiking", + "price": 3315.69, + "title": "excepteur anim", + "description": "Esse velit deserunt ut ipsum. Non quis proident esse voluptate culpa nisi ex aute amet. Consequat exercitation commodo laborum adipisicing culpa dolore elit anim aute eiusmod irure excepteur. Ut reprehenderit eiusmod culpa ipsum Lorem qui Lorem ut dolor minim aliquip in. Dolore nostrud esse id occaecat amet irure consequat aliquip aute dolor et consequat aute voluptate.\r\n", + "registered": "2022-01-20T05:45:56 -07:00" + }, + { + "id": 22, + "uid": 9, + "guid": "e7ffb67c-8f9a-4337-bfb9-d9a3f141a5ec", + "category": "home", + "price": 1959.72, + "title": "labore ipsum", + "description": "Cupidatat excepteur ad fugiat pariatur labore non minim est ea labore non adipisicing ad. Consequat amet sit tempor voluptate. Occaecat et in ullamco tempor ex. Sint incididunt ullamco sit mollit magna dolore elit tempor dolor amet.\r\n", + "registered": "2022-02-06T07:08:29 -07:00" + }, + { + "id": 23, + "uid": 14, + "guid": "bb6f6def-518b-4a67-bd7b-dc370bf73a86", + "category": "hiking", + "price": 1250.09, + "title": "minim mollit", + "description": "Eiusmod aute Lorem cupidatat ullamco duis aute minim. Adipisicing tempor ullamco velit esse id adipisicing. Amet sint incididunt officia ex qui. Sint velit aliquip do amet incididunt eiusmod. Eiusmod eu dolor nisi consequat id sint. Laborum deserunt esse nisi esse.\r\n", + "registered": "2022-02-06T07:48:48 -07:00" + }, + { + "id": 24, + "uid": 8, + "guid": "f69bcb75-cd44-4ad5-af45-7af611a38bda", + "category": "hiking", + "price": 3326.46, + "title": "nostrud irure", + "description": "Enim enim dolor nisi exercitation proident. Dolore labore excepteur reprehenderit officia pariatur incididunt ea aliquip dolor incididunt exercitation eu aliquip. Id reprehenderit sint in labore ipsum ad non deserunt adipisicing cupidatat aliquip pariatur. Dolore in officia non et amet enim dolore veniam ullamco. Ex enim dolor sunt eu. Proident laboris est enim voluptate.\r\n", + "registered": "2022-02-03T06:41:01 -07:00" + }, + { + "id": 25, + "uid": 14, + "guid": "7bd04be9-e0c4-429a-a676-61be7cfcd28d", + "category": "hiking", + "price": 1422.85, + "title": "do in", + "description": "Duis excepteur magna elit sint non labore commodo in pariatur id ullamco aliqua ut elit. Est aliqua ea minim elit magna non incididunt ad amet ullamco. Quis non cillum sint consectetur. Esse esse laboris minim eiusmod velit exercitation eu adipisicing eu elit amet do. Quis exercitation culpa fugiat labore magna laboris dolor laborum ad culpa proident ullamco.\r\n", + "registered": "2022-02-03T04:25:34 -07:00" + }, + { + "id": 26, + "uid": 14, + "guid": "57990338-3b0e-43dc-bceb-073895e4f276", + "category": "food", + "price": 2634.34, + "title": "mollit nisi", + "description": "Excepteur labore consectetur proident magna elit consequat ipsum id voluptate. Est elit irure ea laborum nulla fugiat eiusmod nulla quis voluptate eiusmod proident nulla. Aliquip consequat velit ea reprehenderit deserunt ipsum eiusmod.\r\n", + "registered": "2022-02-24T10:34:15 -07:00" + }, + { + "id": 27, + "uid": 6, + "guid": "95e39e73-115a-4ddd-86c8-a313f339594b", + "category": "home", + "price": 1537.86, + "title": "non in", + "description": "Est ipsum ad qui et eiusmod. Sint esse veniam esse consequat qui aliqua nulla consectetur laboris esse eu esse. Velit ad proident dolor laborum enim culpa laboris cillum. Exercitation ipsum nostrud proident sint occaecat commodo.\r\n", + "registered": "2022-01-14T10:20:43 -07:00" + }, + { + "id": 28, + "uid": 9, + "guid": "c0802063-27be-4e66-90b7-21795a53036e", + "category": "hiking", + "price": 1718.34, + "title": "adipisicing tempor", + "description": "Sint ipsum irure duis non sunt laboris qui mollit aliquip nulla. Velit sit eu laborum veniam qui labore non occaecat exercitation culpa eu veniam velit. Ea sit anim Lorem nulla laborum magna eiusmod. Incididunt voluptate minim irure aliquip non sit magna proident veniam esse.\r\n", + "registered": "2022-01-01T04:15:16 -07:00" + }, + { + "id": 29, + "uid": 10, + "guid": "401e48b3-ec96-4cac-ba89-6ee6c6d5ebff", + "category": "hiking", + "price": 2411.34, + "title": "mollit anim", + "description": "Consequat consequat enim laboris deserunt. Do eiusmod consectetur labore magna aute sunt velit occaecat aliqua sit. Nisi proident do aute cupidatat minim occaecat nisi nisi anim commodo labore duis. Adipisicing et elit ipsum commodo. Proident laboris duis fugiat veniam. Ea esse voluptate enim do quis sit elit ea enim dolore fugiat.\r\n", + "registered": "2022-02-25T10:20:16 -07:00" + }, + { + "id": 30, + "uid": 2, + "guid": "68007811-190b-43aa-b0b8-b595f50b0f31", + "category": "home", + "price": 2628.93, + "title": "veniam deserunt", + "description": "Consectetur irure nulla non reprehenderit tempor elit incididunt voluptate sunt sit. Nulla fugiat velit adipisicing labore duis non dolor proident est exercitation cupidatat id. Deserunt irure reprehenderit cillum eu ipsum in ut fugiat. Sint laboris esse cillum duis fugiat enim. Labore amet exercitation in magna officia laborum qui do commodo dolore. Ea mollit magna enim ullamco reprehenderit labore pariatur laboris eu duis eiusmod Lorem mollit adipisicing.\r\n", + "registered": "2022-01-31T04:23:21 -07:00" + }, + { + "id": 31, + "uid": 12, + "guid": "f1b1b9db-db78-4a65-9229-89895c4fa6c8", + "category": "food", + "price": 1758.3, + "title": "et do", + "description": "Commodo sint dolore esse commodo laborum. Do quis id magna id anim irure quis cillum Lorem enim. Nulla tempor aliqua incididunt sit anim tempor do voluptate id dolor sint dolore. Labore qui do commodo aliquip qui laborum ipsum mollit aliqua laborum sint.\r\n", + "registered": "2022-01-14T06:34:10 -07:00" + }, + { + "id": 32, + "uid": 13, + "guid": "69a3ed4c-6fd3-44f5-b846-fd972d92f389", + "category": "medication", + "price": 2063.05, + "title": "sit nostrud", + "description": "Deserunt fugiat exercitation commodo commodo voluptate consequat consectetur aute esse exercitation deserunt. Dolor ex amet velit occaecat veniam non. Do occaecat aliquip proident est aute quis occaecat deserunt excepteur reprehenderit non veniam laborum adipisicing. Nostrud est ipsum ad sit dolore. Anim labore laboris ex cupidatat laboris labore ipsum incididunt Lorem magna Lorem minim non. Dolor sit ut non sunt deserunt. Laborum quis dolore aliquip ullamco incididunt veniam qui commodo nisi.\r\n", + "registered": "2022-01-19T01:19:45 -07:00" + }, + { + "id": 33, + "uid": 11, + "guid": "f9dbcf0c-2a00-40ea-89c9-b7b7a25cfbbc", + "category": "food", + "price": 2876.68, + "title": "quis veniam", + "description": "Commodo quis occaecat incididunt aute culpa minim excepteur veniam ullamco laborum commodo in anim elit. Aute pariatur elit irure qui. Laborum cillum aliqua cillum irure id deserunt nisi dolor est laborum incididunt magna est sit. Veniam dolor sunt exercitation ut esse et. Voluptate consequat ullamco sunt occaecat reprehenderit veniam deserunt laborum aliquip cupidatat velit Lorem ad.\r\n", + "registered": "2022-01-17T04:14:50 -07:00" + }, + { + "id": 34, + "uid": 8, + "guid": "751455e3-b4f1-49c2-93c6-5471a8abab19", + "category": "medication", + "price": 3114.38, + "title": "excepteur ipsum", + "description": "Sunt quis laboris nulla ad. Laboris in nulla sunt Lorem adipisicing. Duis ad ex nisi proident dolore. Duis magna officia est ea culpa exercitation ea consequat. Elit veniam et aliquip exercitation id proident aute eiusmod nulla nulla esse.\r\n", + "registered": "2022-02-11T06:54:26 -07:00" + }, + { + "id": 35, + "uid": 1, + "guid": "6922494e-f8a1-422b-88a8-13254ee75cf2", + "category": "home", + "price": 3451.74, + "title": "commodo sit", + "description": "Reprehenderit exercitation in minim anim quis dolor id enim excepteur. Laborum esse in duis excepteur ipsum ex cupidatat. Eu amet sunt occaecat do magna est id aute aliquip eiusmod ad culpa veniam. Magna aliqua eiusmod Lorem non excepteur reprehenderit anim sint proident.\r\n", + "registered": "2022-02-07T02:22:10 -07:00" + }, + { + "id": 36, + "uid": 13, + "guid": "bc81bfba-0c90-4c4e-bd77-db8654f79b9d", + "category": "hiking", + "price": 3624.98, + "title": "aliqua voluptate", + "description": "Ex quis anim excepteur adipisicing reprehenderit ullamco anim amet occaecat excepteur pariatur. Nulla velit incididunt laboris laboris laborum anim incididunt excepteur aliqua nisi dolore dolore aute eu. Consequat id consectetur nulla laboris cillum ut culpa nulla ipsum. Velit ad aliquip cupidatat excepteur mollit exercitation eiusmod officia incididunt anim quis ut non. Ad incididunt excepteur sint dolor. Elit irure dolore commodo cillum fugiat ut nisi aliqua et. Consequat magna ipsum aliquip deserunt irure sit excepteur.\r\n", + "registered": "2022-02-08T09:10:46 -07:00" + }, + { + "id": 37, + "uid": 7, + "guid": "4c3f02c4-14bb-44bc-8e7d-a1002a66a01d", + "category": "home", + "price": 3681.16, + "title": "labore veniam", + "description": "Ipsum quis ea ipsum et incididunt laboris id. Non fugiat excepteur irure nulla ad sint aliqua qui adipisicing. Id culpa non occaecat aliquip incididunt fugiat est esse nulla sit minim. Duis aliquip adipisicing commodo aliqua consequat laborum aliquip exercitation.\r\n", + "registered": "2022-01-30T05:11:18 -07:00" + }, + { + "id": 38, + "uid": 5, + "guid": "e1a7607d-ef77-4d73-a8e2-b8fc88b11063", + "category": "hiking", + "price": 1628.91, + "title": "elit consectetur", + "description": "Sunt aute eu duis ad nulla magna laboris qui adipisicing voluptate. Quis ad cillum nulla proident magna esse. Nisi dolor officia nostrud amet eu cupidatat eu sunt consectetur proident veniam excepteur. Cillum eu magna ut aliquip minim consequat.\r\n", + "registered": "2022-02-11T01:08:46 -07:00" + }, + { + "id": 39, + "uid": 0, + "guid": "a9d92664-8c9a-47a7-95ca-727c088ea2f6", + "category": "home", + "price": 1427.85, + "title": "ullamco eu", + "description": "Nostrud ullamco ad velit adipisicing elit nostrud deserunt quis nisi aute duis nisi nisi aliqua. Consequat in esse mollit deserunt laborum deserunt labore. Irure id voluptate eiusmod proident adipisicing culpa. Ex Lorem et veniam duis fugiat voluptate ea commodo minim. Excepteur amet ea eiusmod do.\r\n", + "registered": "2022-01-26T03:23:13 -07:00" + }, + { + "id": 40, + "uid": 15, + "guid": "2d95f5e8-f0ef-4e34-a8a9-67b9990d680b", + "category": "home", + "price": 2517.33, + "title": "fugiat non", + "description": "Cupidatat mollit commodo officia ad ipsum exercitation commodo incididunt. Sunt ullamco culpa non ad culpa veniam ea aliquip ullamco. Nisi voluptate excepteur nisi do commodo esse proident mollit culpa cupidatat nostrud cillum. Enim aliquip irure velit enim culpa commodo dolore anim pariatur sunt et non pariatur laborum. Cupidatat aliquip fugiat enim deserunt Lorem mollit sint. Anim sunt voluptate adipisicing culpa dolore commodo commodo ipsum. Occaecat exercitation exercitation consectetur laborum eiusmod tempor dolore.\r\n", + "registered": "2022-01-14T10:20:39 -07:00" + }, + { + "id": 41, + "uid": 15, + "guid": "71b4432f-25cc-496e-ac10-37973d88672c", + "category": "food", + "price": 1968.8, + "title": "enim qui", + "description": "Aliquip in anim elit do elit ad consequat et sunt Lorem veniam irure. Laboris nulla enim sit ea ut ut. Veniam ex fugiat aliquip sit. Velit laboris dolore dolor excepteur do ut duis laborum dolor duis consectetur fugiat enim esse. Duis pariatur commodo proident in adipisicing ea voluptate aliquip exercitation laborum eiusmod sit consectetur ut. Officia irure esse exercitation duis eiusmod consectetur do ea quis ex. Nostrud aute veniam consectetur excepteur laborum minim et esse quis veniam Lorem fugiat.\r\n", + "registered": "2022-02-20T01:54:30 -07:00" + }, + { + "id": 42, + "uid": 12, + "guid": "2db1c1c5-3adb-4100-81c8-93a596df394b", + "category": "medication", + "price": 2527.21, + "title": "et velit", + "description": "In cillum ullamco nostrud reprehenderit reprehenderit sint aute. Lorem labore veniam qui pariatur reprehenderit id nulla eiusmod. Ad sunt labore pariatur anim officia. Nulla irure enim deserunt est. Consectetur enim consectetur anim est non est dolore ullamco proident. Et deserunt excepteur non et magna cillum incididunt dolor.\r\n", + "registered": "2022-01-25T11:39:26 -07:00" + }, + { + "id": 43, + "uid": 7, + "guid": "9738e889-eb48-4de0-930e-90a99cfe13f3", + "category": "hiking", + "price": 2200.26, + "title": "proident excepteur", + "description": "Veniam consequat elit ipsum sit cillum irure excepteur duis cillum reprehenderit occaecat dolore. Dolore irure laborum ex irure labore pariatur labore. Nostrud minim minim culpa laborum non deserunt ullamco occaecat adipisicing. Magna incididunt non cupidatat officia. Consequat amet ex ex cillum dolore laboris eiusmod laborum amet Lorem Lorem. Reprehenderit aliquip ipsum veniam sit duis nulla labore pariatur tempor nostrud et non.\r\n", + "registered": "2022-02-03T03:33:04 -07:00" + }, + { + "id": 44, + "uid": 10, + "guid": "21002ca7-53f7-46ba-bf85-9cca8a482978", + "category": "hiking", + "price": 1318.97, + "title": "elit est", + "description": "Dolore veniam excepteur magna esse in laborum ex anim ullamco. Eu veniam officia eu commodo magna labore labore ea deserunt enim enim aliquip. Ex aute officia commodo anim qui reprehenderit adipisicing incididunt proident aliqua irure quis ex. Magna in non non excepteur laborum consequat proident.\r\n", + "registered": "2022-02-07T07:42:48 -07:00" + }, + { + "id": 45, + "uid": 9, + "guid": "67cd26f2-4f23-4750-8481-14d7f4d75a71", + "category": "medication", + "price": 1747.4, + "title": "esse quis", + "description": "Cillum non id ea eu consequat sit culpa amet nulla dolore ad. Id laborum elit duis officia et irure cupidatat reprehenderit mollit. Et consequat deserunt ex consectetur amet pariatur elit veniam non esse duis irure.\r\n", + "registered": "2022-01-26T04:11:38 -07:00" + }, + { + "id": 46, + "uid": 3, + "guid": "cd0595aa-d42f-42f6-8920-f76483713d39", + "category": "hiking", + "price": 3457.3, + "title": "cupidatat in", + "description": "Incididunt nisi aliqua adipisicing cillum aliquip labore. Minim cillum laborum cillum velit ullamco amet sit dolore non ut in dolore. Sit amet aliqua sit Lorem ad qui fugiat sint aliquip est sit aliqua tempor Lorem. Nostrud nulla sunt velit commodo. Laboris in laborum pariatur id pariatur veniam excepteur elit velit et cupidatat nulla proident.\r\n", + "registered": "2022-01-21T07:47:27 -07:00" + }, + { + "id": 47, + "uid": 10, + "guid": "592e61a3-8b7c-4a6a-a7e4-92e47c4b3518", + "category": "food", + "price": 3936.61, + "title": "sit reprehenderit", + "description": "Voluptate commodo nulla consectetur nisi minim culpa elit magna elit sunt do aute eu fugiat. In aute cupidatat id id anim nostrud in minim adipisicing. Exercitation occaecat nisi excepteur aliqua dolor nisi. Et incididunt eiusmod elit in fugiat dolor magna pariatur tempor ad duis.\r\n", + "registered": "2022-01-09T10:50:40 -07:00" + }, + { + "id": 48, + "uid": 12, + "guid": "c54e3012-6b40-4d6b-bc5f-c1a65b1bfa1b", + "category": "home", + "price": 1202.65, + "title": "aliquip aliqua", + "description": "Qui commodo nulla eiusmod anim sint ea dolore cupidatat est cupidatat veniam. Nulla elit tempor ullamco sit eiusmod incididunt mollit sit. Excepteur minim sit id ex laborum et anim. Ullamco elit in dolor duis incididunt laboris veniam labore nisi. Sunt est consequat eu sunt aute incididunt dolor quis minim qui.\r\n", + "registered": "2022-02-09T01:00:36 -07:00" + }, + { + "id": 49, + "uid": 10, + "guid": "80901844-566e-4893-bddf-738f5fe42a65", + "category": "home", + "price": 1428.51, + "title": "ea occaecat", + "description": "Velit proident officia ipsum aute. Consequat minim occaecat sit sint commodo fugiat occaecat duis velit sunt cillum pariatur. Deserunt culpa quis Lorem non do voluptate quis ipsum culpa aliquip amet voluptate aliqua sit. Laboris aliquip est amet occaecat amet proident. Duis incididunt consequat nulla sit voluptate ea proident est dolore tempor.\r\n", + "registered": "2022-02-22T02:02:26 -07:00" + }, + { + "id": 50, + "uid": 5, + "guid": "8acadff9-c9c4-41ed-bdd1-7bd6cdcf4d4a", + "category": "medication", + "price": 2060.74, + "title": "pariatur aliqua", + "description": "Sunt nisi anim consequat consequat dolore amet velit est fugiat ex id mollit et. Sit ex minim cillum Lorem et fugiat ipsum excepteur exercitation sint. Nisi culpa excepteur mollit fugiat eu consequat culpa. Irure laboris et duis ullamco in adipisicing id aliqua.\r\n", + "registered": "2022-01-30T09:32:43 -07:00" + }, + { + "id": 51, + "uid": 10, + "guid": "7c198b01-8698-4db2-9558-5bff1e6eb5e8", + "category": "home", + "price": 2485.2, + "title": "irure in", + "description": "Quis est voluptate reprehenderit minim nulla veniam ea officia. Proident pariatur quis labore quis pariatur minim nisi fugiat eiusmod minim est ipsum in id. Nostrud ipsum et voluptate eiusmod commodo deserunt consectetur.\r\n", + "registered": "2022-02-24T08:21:18 -07:00" + }, + { + "id": 52, + "uid": 3, + "guid": "cfb1399e-2b0a-44c0-8f61-9dc57dce1f9b", + "category": "home", + "price": 3040.68, + "title": "reprehenderit aliquip", + "description": "Sunt id esse qui excepteur culpa adipisicing laboris. Cupidatat minim amet reprehenderit fugiat commodo excepteur sit laboris eu labore. Ipsum tempor do nulla elit cupidatat amet adipisicing nisi in. Ullamco in culpa occaecat nisi esse veniam labore est velit. Ad do fugiat enim proident. Ea adipisicing magna amet ex adipisicing sint duis occaecat veniam et. Minim do consectetur cillum duis elit ex voluptate magna in.\r\n", + "registered": "2022-02-11T11:57:52 -07:00" + }, + { + "id": 53, + "uid": 14, + "guid": "a24f4f04-c7ae-4aa2-9f70-63de8dc4d7b5", + "category": "home", + "price": 2141.11, + "title": "ipsum occaecat", + "description": "Cillum et do amet eu irure dolor pariatur est ipsum deserunt labore aute. Culpa ipsum ullamco reprehenderit voluptate Lorem deserunt. Incididunt incididunt pariatur commodo sint id. Exercitation elit fugiat commodo commodo mollit nostrud. Incididunt veniam dolore exercitation laborum deserunt do.\r\n", + "registered": "2022-01-19T06:31:24 -07:00" + }, + { + "id": 54, + "uid": 6, + "guid": "65fdde43-02f7-4456-84dc-825bc353c6c2", + "category": "home", + "price": 3593.94, + "title": "duis veniam", + "description": "Excepteur consequat esse nulla est. Ad laboris Lorem ipsum laboris veniam deserunt. Ut veniam in nulla commodo incididunt qui occaecat nisi. Consectetur nisi amet excepteur dolor irure in incididunt cupidatat in occaecat dolor. Culpa do eiusmod labore ipsum aliquip voluptate duis adipisicing culpa. Ullamco pariatur non aliquip veniam commodo anim commodo et. Incididunt in ut laborum exercitation qui in fugiat officia do cillum fugiat adipisicing.\r\n", + "registered": "2022-01-23T11:50:10 -07:00" + }, + { + "id": 55, + "uid": 10, + "guid": "f15dfc02-5792-4a05-a5eb-3923f15ac25f", + "category": "food", + "price": 1544.38, + "title": "et enim", + "description": "Ullamco duis Lorem ut id sit ipsum proident. Lorem exercitation elit mollit cillum adipisicing Lorem esse officia do. Veniam do voluptate do in commodo minim labore aute reprehenderit cillum laborum reprehenderit. Velit aute consequat adipisicing proident in deserunt excepteur sint veniam. Duis veniam officia ad non voluptate excepteur fugiat pariatur id adipisicing irure veniam. Et amet ad labore enim laboris nulla voluptate magna Lorem ex incididunt amet ea in.\r\n", + "registered": "2022-01-14T10:59:21 -07:00" + }, + { + "id": 56, + "uid": 5, + "guid": "7af254ce-7605-4da5-a6d8-839d0dd27f12", + "category": "home", + "price": 1431.98, + "title": "sint commodo", + "description": "Fugiat dolor occaecat et et tempor ipsum deserunt velit. Sint culpa dolor veniam est qui eu aliqua sit velit. Commodo elit fugiat sint proident. Lorem cupidatat labore sunt elit proident magna esse sint est cupidatat. Sunt Lorem consequat sit veniam dolore voluptate.\r\n", + "registered": "2022-01-05T06:15:20 -07:00" + }, + { + "id": 57, + "uid": 1, + "guid": "ec4b24a4-52e8-43f1-a345-f501e26a2aa2", + "category": "food", + "price": 3654.47, + "title": "laboris in", + "description": "Labore nisi deserunt ut proident minim amet ullamco adipisicing nulla ut. Reprehenderit ut nostrud sit esse deserunt eu tempor sit sint in. Aliqua esse reprehenderit laborum sunt consequat do consequat ut proident esse fugiat tempor dolor. Ut ullamco est aliqua et elit. Sunt do eiusmod excepteur eu ut adipisicing cupidatat quis adipisicing.\r\n", + "registered": "2022-01-18T07:10:37 -07:00" + }, + { + "id": 58, + "uid": 13, + "guid": "c91020dd-2637-48fe-b79e-c11edd88ebd1", + "category": "hiking", + "price": 3443.99, + "title": "anim proident", + "description": "Consectetur consectetur voluptate veniam et excepteur commodo officia non exercitation culpa labore elit deserunt amet. Nostrud nulla ex sunt dolor ad deserunt. Excepteur in mollit dolor reprehenderit nisi elit anim Lorem et cupidatat aliquip elit incididunt. Nulla voluptate laboris excepteur veniam aliqua id irure laborum non deserunt consectetur Lorem. Et laboris cupidatat enim excepteur pariatur et voluptate aute. Incididunt irure non proident tempor ea enim. Non tempor minim aliquip officia qui ex reprehenderit laborum.\r\n", + "registered": "2022-02-21T04:37:14 -07:00" + }, + { + "id": 59, + "uid": 15, + "guid": "57b262cb-b412-484a-b39e-6339d58646bb", + "category": "medication", + "price": 3271.71, + "title": "voluptate enim", + "description": "Anim labore occaecat aliqua qui aute amet Lorem excepteur ad qui labore. Laboris tempor consectetur elit aliqua id dolor quis do irure sint cupidatat. Sit non amet ullamco veniam aliqua deserunt est consectetur Lorem do ullamco occaecat. Ex non adipisicing enim velit deserunt est deserunt commodo. Sint voluptate in deserunt laboris Lorem laboris veniam reprehenderit enim veniam aliquip laboris. Incididunt mollit voluptate nulla elit qui incididunt exercitation amet culpa voluptate occaecat.\r\n", + "registered": "2022-02-26T10:16:39 -07:00" + }, + { + "id": 60, + "uid": 12, + "guid": "0a0d3506-d5aa-40e5-90d3-e499c5edc1c6", + "category": "hiking", + "price": 3643.39, + "title": "eiusmod qui", + "description": "Sunt exercitation tempor quis proident eiusmod id. Lorem nulla incididunt veniam aute consequat dolore proident sunt aliquip. Commodo officia ex commodo velit fugiat sit pariatur eiusmod deserunt aliqua nisi cupidatat est ea. Ut cupidatat sit enim consectetur exercitation ea amet Lorem enim. Sint sit Lorem nulla proident elit aliquip.\r\n", + "registered": "2022-01-07T03:24:13 -07:00" + }, + { + "id": 61, + "uid": 15, + "guid": "a2cf43ac-c1a0-4200-930d-bbe2e0128ac8", + "category": "home", + "price": 1556.19, + "title": "Lorem sunt", + "description": "Dolore ut officia ad cillum dolor exercitation consequat culpa sunt. Aute dolore velit et laborum amet do. Commodo aute mollit veniam sit officia est do cupidatat anim. Duis enim aute labore officia commodo incididunt elit ipsum fugiat.\r\n", + "registered": "2022-02-01T06:36:52 -07:00" + }, + { + "id": 62, + "uid": 8, + "guid": "f6e3b4ea-98a4-48aa-9e6a-c3e75fe84c04", + "category": "home", + "price": 3612.24, + "title": "in qui", + "description": "Aute tempor eiusmod commodo velit elit sint tempor tempor enim. Ullamco nisi nostrud laboris velit sit dolore. Enim consequat do occaecat dolor. Consequat eu fugiat labore magna ea commodo. Magna laboris reprehenderit enim labore culpa ea proident.\r\n", + "registered": "2022-01-19T07:01:57 -07:00" + }, + { + "id": 63, + "uid": 2, + "guid": "8c7a865d-c139-48b9-98a3-4d10768224c1", + "category": "hiking", + "price": 3376.23, + "title": "minim consequat", + "description": "Ex incididunt non velit nisi voluptate sint ea qui occaecat ea aliqua officia aliquip veniam. Cillum Lorem mollit anim Lorem. Sit sunt minim ad et. Officia quis esse qui laborum et in deserunt non exercitation et dolore ipsum mollit nostrud. Reprehenderit sunt deserunt esse cillum quis excepteur voluptate deserunt aliquip.\r\n", + "registered": "2022-02-15T05:00:39 -07:00" + }, + { + "id": 64, + "uid": 7, + "guid": "cb4ed14d-bd18-4b36-b4d5-f351ef7afb81", + "category": "food", + "price": 3658.89, + "title": "fugiat est", + "description": "Officia voluptate voluptate nisi eiusmod consectetur et id nostrud cillum Lorem. In ex eu velit dolore irure id anim nisi. Ex veniam ad exercitation dolore culpa non incididunt mollit non ad excepteur magna exercitation culpa.\r\n", + "registered": "2022-01-23T04:53:06 -07:00" + }, + { + "id": 65, + "uid": 12, + "guid": "3e5df3b5-c456-4ff6-8ba9-dbcc27054a8b", + "category": "hiking", + "price": 3760.33, + "title": "aute do", + "description": "Sint consectetur sunt dolore tempor nostrud incididunt nostrud mollit quis mollit non consectetur magna. Sunt amet est dolore officia quis anim culpa voluptate nulla. Adipisicing dolor commodo in sit ad dolor excepteur pariatur labore amet laboris.\r\n", + "registered": "2022-01-11T02:55:48 -07:00" + }, + { + "id": 66, + "uid": 15, + "guid": "d11a6346-5117-40d2-8c3b-e6245de96c17", + "category": "home", + "price": 1059.89, + "title": "nulla eu", + "description": "Enim exercitation nostrud minim enim veniam nostrud eiusmod anim. Eiusmod ea cillum qui veniam. Sit mollit magna velit culpa exercitation.\r\n", + "registered": "2022-02-16T10:38:24 -07:00" + }, + { + "id": 67, + "uid": 5, + "guid": "44a4abff-6095-4ca6-871d-0f68e6a2b62d", + "category": "medication", + "price": 2171.05, + "title": "incididunt laboris", + "description": "Lorem nostrud nulla in ex occaecat anim. Consequat aute aliquip ipsum dolor velit ut aliquip dolore commodo. Duis exercitation veniam commodo mollit in do mollit esse excepteur elit deserunt sint. Sint dolore incididunt qui quis tempor nisi dolor nisi enim esse id voluptate culpa et.\r\n", + "registered": "2022-02-04T04:56:09 -07:00" + }, + { + "id": 68, + "uid": 10, + "guid": "34850157-7006-4b94-a25d-b7647c762ff7", + "category": "hiking", + "price": 3999.13, + "title": "eu eiusmod", + "description": "Exercitation tempor officia pariatur aute eiusmod voluptate esse cillum cillum mollit id duis. Magna occaecat anim laborum ipsum laborum eu esse quis. Esse laboris occaecat ea cupidatat sunt velit consequat quis labore. Cupidatat nisi ea elit culpa sunt ullamco adipisicing incididunt commodo laborum nulla.\r\n", + "registered": "2022-01-16T08:11:23 -07:00" + }, + { + "id": 69, + "uid": 0, + "guid": "05123c9f-188e-454a-b5ff-c60510a454c4", + "category": "home", + "price": 2812.66, + "title": "cillum ipsum", + "description": "Fugiat deserunt nulla ipsum elit consectetur fugiat. Velit aute sit in nulla voluptate magna aute qui consequat tempor. Magna laborum deserunt veniam ex voluptate commodo. Ipsum exercitation ea qui ad labore laboris. Incididunt velit labore commodo ex anim eu non sunt consectetur reprehenderit.\r\n", + "registered": "2022-02-20T03:33:10 -07:00" + }, + { + "id": 70, + "uid": 14, + "guid": "d00db632-ba7c-48d7-b816-26d4b1482068", + "category": "home", + "price": 3352.85, + "title": "nisi adipisicing", + "description": "Officia minim amet non mollit labore aute cupidatat ex eu consectetur sit ad. Ipsum incididunt magna fugiat exercitation pariatur. Tempor cupidatat adipisicing enim cillum laboris magna tempor ea exercitation aliquip. Pariatur qui elit nisi do exercitation labore ut sit ipsum do sit officia quis. Ut amet pariatur commodo aliquip in do.\r\n", + "registered": "2022-01-05T03:23:43 -07:00" + }, + { + "id": 71, + "uid": 3, + "guid": "c4cd1b9f-b43b-4619-9b9c-6735e6c729ab", + "category": "home", + "price": 2636.95, + "title": "esse adipisicing", + "description": "Id duis laborum ut enim ipsum. Culpa sit occaecat quis dolore. Ut duis pariatur aliqua occaecat qui nulla consequat nostrud. Magna dolor nisi nostrud aliqua. Mollit ipsum incididunt voluptate officia. Elit sint quis esse anim minim magna sint do id quis velit mollit eu. Id dolor aliqua sint commodo aliqua aute magna irure nostrud anim.\r\n", + "registered": "2022-01-07T09:01:58 -07:00" + }, + { + "id": 72, + "uid": 11, + "guid": "e5047cc3-7d41-4ced-844a-a1437a46d483", + "category": "hiking", + "price": 2858.49, + "title": "commodo deserunt", + "description": "Consequat anim id culpa minim ad enim ipsum Lorem eiusmod. Mollit et elit incididunt est. Voluptate ea eiusmod ipsum aliquip sunt elit nostrud quis labore veniam sunt irure. Adipisicing elit ad eiusmod occaecat in excepteur nulla incididunt ex officia pariatur nisi aliquip.\r\n", + "registered": "2022-01-12T01:51:28 -07:00" + }, + { + "id": 73, + "uid": 13, + "guid": "56100c1a-efb7-4cf7-b470-1f44cf56ad12", + "category": "home", + "price": 2365.71, + "title": "in enim", + "description": "Ea laboris officia et qui aliquip minim nisi ipsum culpa. Occaecat enim laboris voluptate est esse pariatur quis aliqua magna elit sint officia cillum. Consequat id id reprehenderit dolor laboris fugiat Lorem id aliqua enim. Et voluptate quis minim aliqua elit tempor anim nulla. Cupidatat elit elit sit reprehenderit magna ullamco officia.\r\n", + "registered": "2022-01-30T05:54:51 -07:00" + }, + { + "id": 74, + "uid": 9, + "guid": "444807d2-3146-4c74-ab8c-88f7e483412f", + "category": "hiking", + "price": 1929.78, + "title": "pariatur mollit", + "description": "Consectetur ea non et id sint do voluptate ex id dolore ad ipsum nulla. Nisi do reprehenderit quis incididunt commodo labore veniam. Do minim pariatur in irure nostrud ex aute incididunt deserunt veniam consequat voluptate pariatur aute. Eiusmod ullamco elit eu aliqua labore. In ipsum sit quis Lorem laboris dolore est. Elit sunt exercitation incididunt ut velit incididunt laborum anim sunt laborum minim Lorem ut nulla.\r\n", + "registered": "2022-02-17T12:59:13 -07:00" + }, + { + "id": 75, + "uid": 11, + "guid": "51d5a448-00ca-4d61-afc4-b75c5b719362", + "category": "home", + "price": 3459.25, + "title": "deserunt cillum", + "description": "Anim ad amet fugiat ad officia veniam amet nisi deserunt sunt et adipisicing eiusmod ad. Sunt dolore in ex minim sit minim incididunt deserunt aute anim reprehenderit exercitation. Minim voluptate et pariatur id occaecat non ut cupidatat magna fugiat adipisicing mollit id. Esse labore in reprehenderit adipisicing sit officia ex dolore mollit minim mollit exercitation. Pariatur id sit consectetur enim consectetur duis sint nostrud mollit proident ullamco.\r\n", + "registered": "2022-01-31T12:19:50 -07:00" + }, + { + "id": 76, + "uid": 4, + "guid": "78319267-ab43-4927-8ec2-222932a29d93", + "category": "hiking", + "price": 3771.73, + "title": "culpa quis", + "description": "Ullamco sint quis est eiusmod culpa enim culpa officia do adipisicing ipsum tempor quis. Do ex sint tempor sunt fugiat elit eu labore. Exercitation magna Lorem commodo veniam commodo officia quis consectetur sunt laboris. Sit tempor veniam dolor amet. Irure in nostrud ut duis culpa cupidatat eiusmod deserunt cupidatat consequat ex cupidatat velit nostrud. Ea nostrud anim proident occaecat incididunt irure eu proident voluptate commodo ipsum voluptate aliquip consequat. Culpa enim proident duis sunt officia et velit eiusmod proident ad.\r\n", + "registered": "2022-01-01T02:15:22 -07:00" + }, + { + "id": 77, + "uid": 15, + "guid": "7917b040-1e3c-4003-8676-75752d05da9b", + "category": "food", + "price": 1950.27, + "title": "nulla sint", + "description": "Mollit consectetur nisi dolore nostrud culpa Lorem commodo. Consequat consequat mollit excepteur ex cillum sit tempor ea reprehenderit sit deserunt. Mollit quis fugiat elit ullamco excepteur. Fugiat culpa ipsum occaecat et ea amet mollit.\r\n", + "registered": "2022-02-25T04:22:05 -07:00" + }, + { + "id": 78, + "uid": 6, + "guid": "dea9eb64-533d-4843-8e5e-114e0bd1e802", + "category": "medication", + "price": 3098.03, + "title": "duis sint", + "description": "Elit magna id laborum anim reprehenderit velit esse labore anim dolore. Anim ad do voluptate irure ut ad laborum. Id exercitation dolor do labore laboris ullamco. Aliquip in labore voluptate aliquip labore proident ut velit labore qui elit laboris.\r\n", + "registered": "2022-02-17T05:31:08 -07:00" + }, + { + "id": 79, + "uid": 15, + "guid": "7f5769e7-a411-48e1-911e-28cb535d06fc", + "category": "medication", + "price": 2681.81, + "title": "cillum nostrud", + "description": "Eu tempor deserunt commodo cupidatat aute incididunt Lorem velit eu. Cillum cupidatat anim id voluptate laboris id qui et ea. Veniam id sint eiusmod irure proident voluptate quis. Voluptate nostrud ex duis deserunt eiusmod eiusmod tempor excepteur consequat eu non id incididunt. Tempor eu velit dolor laborum aliquip enim ullamco reprehenderit anim eiusmod id sint ullamco. Culpa culpa ad eiusmod velit. Cillum consectetur esse pariatur officia ipsum ut sunt elit ex elit.\r\n", + "registered": "2022-02-01T03:21:50 -07:00" + }, + { + "id": 80, + "uid": 10, + "guid": "c1b1f639-ee6b-4272-89b8-d3f0a22a0550", + "category": "home", + "price": 1967.79, + "title": "anim eiusmod", + "description": "Et adipisicing eiusmod labore labore cillum sint laborum ea minim mollit ullamco minim eu. Sunt aliquip amet id tempor cupidatat consectetur ex proident non velit do amet cillum aliqua. Sit occaecat aliquip officia amet duis in Lorem magna anim veniam cillum sunt irure ea. Ut et ullamco occaecat tempor proident pariatur. Do deserunt et enim ea magna qui incididunt incididunt mollit nisi mollit.\r\n", + "registered": "2022-02-13T12:54:28 -07:00" + }, + { + "id": 81, + "uid": 2, + "guid": "b805cc59-d789-46cd-8123-d5e784addad0", + "category": "hiking", + "price": 3910.98, + "title": "excepteur velit", + "description": "Reprehenderit eiusmod veniam enim ullamco mollit cillum dolor enim est. Deserunt consectetur ullamco eiusmod exercitation sint nostrud enim irure quis. Sunt ex excepteur occaecat nisi anim aliquip aute tempor incididunt esse adipisicing aute in. Duis nulla amet tempor esse nisi commodo. Enim nulla consequat occaecat sint sunt aute voluptate. Consectetur consectetur ipsum proident ea irure anim minim esse qui amet eiusmod velit. Consectetur ullamco eu ad aliquip mollit quis.\r\n", + "registered": "2022-02-09T05:27:57 -07:00" + }, + { + "id": 82, + "uid": 5, + "guid": "b154d3f3-f900-4d41-88d7-a5d1aef44053", + "category": "home", + "price": 3400.19, + "title": "ea commodo", + "description": "Minim culpa mollit eiusmod fugiat consequat minim labore cillum aliqua cupidatat cillum ut officia fugiat. Adipisicing incididunt reprehenderit incididunt et nostrud sint id enim amet adipisicing qui ad excepteur. Dolore adipisicing quis labore laborum culpa mollit. Deserunt ad elit pariatur eu. Ipsum laboris occaecat eiusmod laboris mollit enim. Minim mollit qui mollit ea non consequat commodo. Occaecat nostrud ea ad dolore reprehenderit.\r\n", + "registered": "2022-02-03T07:19:13 -07:00" + }, + { + "id": 83, + "uid": 7, + "guid": "54a4d2e3-4c70-44b0-bc73-d5ace7977355", + "category": "home", + "price": 1080.8, + "title": "aute anim", + "description": "Officia officia fugiat sunt dolore exercitation duis exercitation laborum cillum aliqua et. Mollit nulla ad nostrud ullamco eiusmod. Ad incididunt do cupidatat ea magna pariatur do incididunt mollit id commodo est Lorem irure. Aute adipisicing incididunt fugiat exercitation elit culpa. Et officia eu minim nisi dolor eiusmod officia sint duis excepteur dolor culpa laborum. Non labore consectetur aliqua occaecat.\r\n", + "registered": "2022-02-01T04:41:48 -07:00" + }, + { + "id": 84, + "uid": 8, + "guid": "6bd16915-5ab9-4c1e-8b82-4f583f3965e4", + "category": "food", + "price": 2556, + "title": "aliqua irure", + "description": "Cupidatat Lorem excepteur labore in consequat officia aute laboris culpa ex commodo enim. Incididunt ut veniam amet non sit sit minim elit incididunt ex dolore nulla labore laborum. Minim labore anim reprehenderit commodo ullamco incididunt ex eu laborum voluptate. Excepteur exercitation velit mollit ad nostrud enim incididunt officia dolor sit laborum laboris ipsum exercitation.\r\n", + "registered": "2022-02-26T03:00:24 -07:00" + }, + { + "id": 85, + "uid": 13, + "guid": "ef481d2e-510e-460b-bd74-50ff76214c8b", + "category": "medication", + "price": 1035.95, + "title": "eiusmod consectetur", + "description": "Aute laborum id sint nulla pariatur deserunt eiusmod pariatur deserunt consequat ex. Dolore officia exercitation officia id Lorem fugiat aliquip officia commodo. Anim sit non ea excepteur eiusmod duis sint sit sunt officia sunt laboris duis. Quis elit veniam ea consequat eu sit reprehenderit est. Qui deserunt aliquip eiusmod est aute sint consectetur aliquip sint occaecat incididunt eu.\r\n", + "registered": "2022-01-17T11:12:58 -07:00" + }, + { + "id": 86, + "uid": 11, + "guid": "107b8231-6e3b-445c-b784-6b0280fe809c", + "category": "medication", + "price": 1441.99, + "title": "nisi enim", + "description": "Anim irure elit adipisicing in fugiat irure tempor sint officia. Cupidatat ullamco eiusmod mollit duis deserunt mollit et consectetur veniam. Est non veniam eu eu. Nisi exercitation veniam excepteur eiusmod proident excepteur consectetur labore duis ad sunt. Eiusmod incididunt reprehenderit elit excepteur cillum mollit nulla nostrud Lorem reprehenderit tempor irure. Dolor aliqua sint deserunt minim labore ut laborum commodo dolore culpa fugiat labore.\r\n", + "registered": "2022-01-03T08:34:10 -07:00" + }, + { + "id": 87, + "uid": 10, + "guid": "45de8bc4-ba54-4aab-bd18-d0ba2d1f4ae0", + "category": "food", + "price": 3773.19, + "title": "reprehenderit consequat", + "description": "Incididunt sunt mollit est amet nisi reprehenderit officia ea qui irure laboris nostrud deserunt. Consectetur non nostrud culpa cillum magna magna minim labore irure nisi excepteur. Laborum velit consequat quis nulla dolore ipsum esse ullamco sit laborum ad sit nisi.\r\n", + "registered": "2022-02-24T10:25:02 -07:00" + }, + { + "id": 88, + "uid": 5, + "guid": "189ca790-82c6-42f7-acb8-ab5736eb0aac", + "category": "food", + "price": 1354.89, + "title": "est officia", + "description": "Dolor exercitation ipsum nulla officia nisi et laboris velit nulla incididunt sunt. Ex ea elit in in non aute voluptate veniam aute nisi. Adipisicing adipisicing veniam culpa tempor. Exercitation consequat nisi irure fugiat elit cupidatat consectetur et officia. Labore quis reprehenderit voluptate fugiat sint consequat eu minim quis ad nisi ad deserunt cupidatat. Quis proident fugiat laborum deserunt nostrud minim ea proident minim consectetur ipsum consectetur deserunt non. Occaecat reprehenderit duis minim cillum dolor ea consequat exercitation.\r\n", + "registered": "2022-01-22T06:56:01 -07:00" + }, + { + "id": 89, + "uid": 9, + "guid": "6da5c34c-5a3c-4e84-b4e4-c1cf4b9572c4", + "category": "medication", + "price": 1160.42, + "title": "qui dolor", + "description": "Exercitation esse cupidatat tempor dolore ex sit tempor eiusmod aliqua in anim quis officia non. Ullamco id dolor enim magna labore incididunt esse duis occaecat elit. Officia sit in ex id excepteur. Proident Lorem officia eu est officia ea cupidatat duis mollit laboris proident. Adipisicing proident anim qui consequat est cupidatat dolor aute nisi aliqua. Ullamco duis amet proident ullamco.\r\n", + "registered": "2022-01-15T10:12:09 -07:00" + }, + { + "id": 90, + "uid": 0, + "guid": "fafb119f-fc82-4316-bb81-34992ab6324c", + "category": "home", + "price": 1327.63, + "title": "eiusmod elit", + "description": "Aliqua anim dolore esse fugiat deserunt sint aliqua laborum non sit fugiat nostrud pariatur Lorem. Commodo enim dolor laboris in. Ipsum tempor reprehenderit laborum ad non incididunt consectetur est consequat adipisicing enim adipisicing adipisicing. Ullamco officia officia culpa amet velit velit est consequat qui sint Lorem adipisicing id.\r\n", + "registered": "2022-01-19T06:20:23 -07:00" + }, + { + "id": 91, + "uid": 0, + "guid": "4dea8f5e-4d3a-41e1-bef4-420f8a521d5f", + "category": "medication", + "price": 2427.18, + "title": "ipsum amet", + "description": "Sunt sit commodo dolor Lorem dolor irure eiusmod. Incididunt occaecat anim dolore commodo officia enim. Mollit labore anim eiusmod in aliquip sit cillum Lorem aute consectetur sunt minim. Esse magna in aute adipisicing. Do et amet sunt eiusmod magna eu pariatur culpa adipisicing fugiat esse do dolor. Eiusmod ex et ut laborum irure mollit enim ut nulla eu dolor. Ad reprehenderit ullamco incididunt consectetur.\r\n", + "registered": "2022-01-09T03:53:00 -07:00" + }, + { + "id": 92, + "uid": 7, + "guid": "66beccfd-d25f-434d-9a43-71570f7b8abd", + "category": "food", + "price": 2334.66, + "title": "proident exercitation", + "description": "In ad occaecat quis eiusmod cillum in proident aliqua amet aliquip ex do. Exercitation et in nostrud id ut magna proident dolore qui. Ipsum qui magna voluptate irure nulla. Sint dolore ipsum ut cillum ullamco duis sunt ex dolore. Duis non consequat cillum ut fugiat Lorem officia occaecat labore.\r\n", + "registered": "2022-02-12T08:45:38 -07:00" + }, + { + "id": 93, + "uid": 14, + "guid": "d67aea8b-767e-4820-a8ca-ab64472cef34", + "category": "home", + "price": 3694.3, + "title": "cillum amet", + "description": "Occaecat fugiat in ea velit cillum pariatur sit aliquip officia do esse pariatur qui reprehenderit. Non esse fugiat sit consectetur aute cupidatat commodo elit eu duis. Eu laboris reprehenderit consectetur velit velit ea esse cillum ea. Deserunt qui esse deserunt aliqua voluptate consectetur enim aliqua ea aute reprehenderit amet amet. Occaecat adipisicing irure ad voluptate elit. Culpa cupidatat mollit et reprehenderit adipisicing id commodo.\r\n", + "registered": "2022-02-19T12:52:58 -07:00" + }, + { + "id": 94, + "uid": 7, + "guid": "9887fe1e-533d-4d3f-a54e-b8996aa2b2b4", + "category": "food", + "price": 3841.64, + "title": "aliqua aliquip", + "description": "Eu ea magna magna sunt commodo culpa ut. Officia sit et anim ullamco. Do adipisicing quis sunt esse nulla tempor ullamco reprehenderit eu. Occaecat do consectetur amet reprehenderit cupidatat fugiat eu veniam esse irure cupidatat Lorem in ut. Tempor deserunt sit reprehenderit ipsum quis. Proident aliqua fugiat tempor consectetur consectetur ad. Magna sunt ullamco esse incididunt.\r\n", + "registered": "2022-02-18T07:54:17 -07:00" + }, + { + "id": 95, + "uid": 2, + "guid": "de43e894-f578-418d-8a90-a97e8ea5ca2c", + "category": "food", + "price": 3636.09, + "title": "velit labore", + "description": "Deserunt sit cupidatat sint consequat enim aliquip officia amet minim. Sit non ipsum ut cillum dolore dolor. Reprehenderit irure sunt minim ea mollit elit reprehenderit adipisicing reprehenderit laborum occaecat ad labore. Irure nostrud nulla occaecat reprehenderit et veniam. Pariatur consequat commodo pariatur minim et et eu culpa qui non nisi id sit veniam. Esse quis commodo cillum cupidatat aliquip esse aliqua consectetur. Consequat ullamco quis fugiat eiusmod aute amet eu mollit ullamco consequat aliquip aliquip sunt.\r\n", + "registered": "2022-02-02T05:31:54 -07:00" + }, + { + "id": 96, + "uid": 10, + "guid": "cf58f8ea-4f73-4428-8cd6-21942d00b4f3", + "category": "home", + "price": 2767.13, + "title": "quis in", + "description": "Quis nisi laborum deserunt officia incididunt adipisicing. Sint ut irure et mollit consequat consequat consectetur sit occaecat culpa nisi proident consectetur cillum. Et laborum in eiusmod minim nisi labore anim. Deserunt incididunt cillum magna laborum exercitation commodo ex.\r\n", + "registered": "2022-01-06T07:59:34 -07:00" + }, + { + "id": 97, + "uid": 15, + "guid": "665d18ce-46cf-4af0-9f95-4a95b8b4a790", + "category": "medication", + "price": 3015.38, + "title": "consectetur est", + "description": "Ad consectetur amet Lorem deserunt enim do esse deserunt laborum eiusmod nulla cupidatat eu. Et voluptate fugiat veniam magna laboris. Ullamco ullamco aliqua reprehenderit ipsum ad. Aliqua nisi ea reprehenderit ipsum. Lorem veniam aliqua enim mollit irure sunt Lorem eiusmod velit. Ipsum mollit id minim commodo exercitation nulla aliqua.\r\n", + "registered": "2022-02-06T12:31:23 -07:00" + }, + { + "id": 98, + "uid": 7, + "guid": "ac5be4b1-4267-4a30-ac82-3fc2c5745ece", + "category": "hiking", + "price": 1186.79, + "title": "dolor quis", + "description": "Sunt qui magna eiusmod magna amet enim ut id esse qui laborum. Labore consectetur nostrud enim sint. Ut velit consequat esse eu occaecat sit. Culpa consectetur ea laboris labore irure anim. Anim fugiat aliqua mollit do anim esse irure qui dolore proident consectetur amet. Amet sit irure cillum Lorem.\r\n", + "registered": "2022-02-19T08:14:59 -07:00" + }, + { + "id": 99, + "uid": 4, + "guid": "a4f233f0-b057-452f-9020-17545ff0b90e", + "category": "home", + "price": 2869.27, + "title": "nisi sunt", + "description": "Enim proident veniam quis laboris. Nisi voluptate est aute deserunt consectetur quis ullamco. Dolor do veniam reprehenderit elit amet nulla aliqua commodo officia aliqua velit ullamco. Veniam sint consectetur mollit qui do deserunt eu esse sunt amet irure minim dolor occaecat. Exercitation do ut fugiat commodo fugiat aute sit non incididunt veniam.\r\n", + "registered": "2022-01-08T02:00:18 -07:00" + } + ] +} diff --git a/w6/index.js b/w6/index.js new file mode 100644 index 0000000..f957dc1 --- /dev/null +++ b/w6/index.js @@ -0,0 +1,79 @@ +import express from "express"; +import mustache from "mustache"; +import bodyParse from "body-parser"; +import { readdirSync, readFileSync } from "fs"; + +const app = express(); +app.use(express.static("./static")); +app.use(bodyParse.urlencoded({ extended: true })); +const port = 9559; + +const data = JSON.parse(readFileSync("./goods.json", "utf-8")); +const templates = new Map(readdirSync("./templates").map(fn => [fn, readFileSync(`./templates/${fn}`, "utf-8")])); + +app.get("/", (req, res) => { + res.send(mustache.render(templates.get("mainPage.html"), data)); +}); + +app.get("/category/:category", (req, res) => { + const goodsForCategory = data.goods.filter(el => el.category === req.params.category); + if (goodsForCategory.length === 0) { + res.redirect("/"); + } else { + res.send(mustache.render(templates.get("categoryPage.html"), { category: req.params.category, goods: goodsForCategory })); + } +}); + +app.get("/goods/:goodUUID", (req, res) => { + let good = null; + let user = null; + for (let _good of data.goods) { + if (_good.guid !== req.params.goodUUID) continue; + + good = _good; + break; + } + for (let _user of data.users) { + if (_user.id !== good.uid) continue; + + user = _user; + break; + } + if (good === null || user === null) { + res.redirect("/"); + } else { + res.send(mustache.render(templates.get("goodsPage.html"), { good, user })); + } +}); + +app.get("/user/:userUUID", (req, res) => { + let user = null; + for (let _user of data.users) { + if (_user.guid !== req.params.userUUID) continue; + + user = _user; + break; + } + if (user === null) { + res.redirect("/"); + } else { + const goods = data.goods.filter(e => e.uid === user.id); + res.send(mustache.render(templates.get("userPage.html"), { user, goods, goodsCount: goods.length })); + } +}); + +app.post("/search", (req, res) => { + const term = req.body.searchTerm.toLowerCase(); + const st = req.body.searchType; + if (term === "") { + res.redirect("/"); + } else { + const showUsers = st === "usersOnly" || st === "both"; + const showGoods = st === "goodsOnly" || st === "both"; + const users = showUsers? data.users.filter(u => u.fullName.toLowerCase().includes(term)) : []; + const goods = showGoods? data.goods.filter(e => e.title.toLowerCase().includes(term) || e.description.toLowerCase().includes(term)) : []; + res.send(mustache.render(templates.get("searchPage.html"), { term, users, goods, showUsers, showGoods })); + } +}); + +app.listen(port, () => console.log(`⚡️ Serving on port ${port}`)); \ No newline at end of file diff --git a/w6/package.json b/w6/package.json new file mode 100644 index 0000000..bce315a --- /dev/null +++ b/w6/package.json @@ -0,0 +1,22 @@ +{ + "name": "w6", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "start": "node .", + "watch": "nodemon -e *", + "build": "docker build -t nuark/w6_bld ." + }, + "author": "nuark", + "license": "MIT", + "dependencies": { + "body-parser": "^1.19.2", + "express": "^4.17.3", + "mustache": "^4.2.0" + }, + "devDependencies": { + "nodemon": "^2.0.15" + } +} diff --git a/w6/pnpm-lock.yaml b/w6/pnpm-lock.yaml new file mode 100644 index 0000000..693711d --- /dev/null +++ b/w6/pnpm-lock.yaml @@ -0,0 +1,1092 @@ +lockfileVersion: 5.3 + +specifiers: + body-parser: ^1.19.2 + express: ^4.17.3 + mustache: ^4.2.0 + nodemon: ^2.0.15 + +dependencies: + body-parser: 1.19.2 + express: 4.17.3 + mustache: 4.2.0 + +devDependencies: + nodemon: 2.0.15 + +packages: + + /@sindresorhus/is/0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: true + + /@szmarczak/http-timer/1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: true + + /abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: true + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.34 + negotiator: 0.6.3 + dev: false + + /ansi-align/3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /array-flatten/1.1.1: + resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /body-parser/1.19.2: + resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.9.7 + raw-body: 2.4.3 + type-is: 1.6.18 + dev: false + + /boxen/5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /cacheable-request/6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.2 + get-stream: 5.2.0 + http-cache-semantics: 4.1.0 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true + + /cli-boxes/2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: true + + /clone-response/1.0.2: + resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} + dependencies: + mimic-response: 1.0.1 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /configstore/5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.9 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: true + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type/1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-signature/1.0.6: + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + dev: false + + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + dependencies: + ms: 2.0.0 + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + dependencies: + ms: 2.1.3 + dev: true + + /decompress-response/3.3.0: + resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: true + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /defer-to-connect/1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: true + + /depd/1.1.2: + resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} + engines: {node: '>= 0.6'} + dev: false + + /destroy/1.0.4: + resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} + dev: false + + /dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /duplexer3/0.1.4: + resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} + dev: true + + /ee-first/1.1.1: + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /encodeurl/1.0.2: + resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + engines: {node: '>= 0.8'} + dev: false + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /escape-goat/2.1.1: + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + dev: false + + /etag/1.8.1: + resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + engines: {node: '>= 0.6'} + dev: false + + /express/4.17.3: + resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.19.2 + content-disposition: 0.5.4 + content-type: 1.0.4 + cookie: 0.4.2 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.9.7 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.17.2 + serve-static: 1.14.2 + setprototypeof: 1.2.0 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: false + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler/1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + dev: false + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh/0.5.2: + resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + engines: {node: '>= 0.6'} + dev: false + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /global-dirs/3.0.0: + resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + engines: {node: '>=10'} + dependencies: + ini: 2.0.0 + dev: true + + /got/9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.4 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: true + + /graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-yarn/2.1.0: + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} + dev: true + + /http-cache-semantics/4.1.0: + resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + dev: true + + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: false + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /ignore-by-default/1.0.1: + resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} + dev: true + + /import-lazy/2.1.0: + resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} + engines: {node: '>=4'} + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /ini/2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + dev: true + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-installed-globally/0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + dependencies: + global-dirs: 3.0.0 + is-path-inside: 3.0.3 + dev: true + + /is-npm/5.0.0: + resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} + engines: {node: '>=10'} + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-typedarray/1.0.0: + resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + dev: true + + /is-yarn-global/0.3.0: + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + dev: true + + /json-buffer/3.0.0: + resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} + dev: true + + /keyv/3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: true + + /latest-version/5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + dependencies: + package-json: 6.5.0 + dev: true + + /lowercase-keys/1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: true + + /lowercase-keys/2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /media-typer/0.3.0: + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + engines: {node: '>= 0.6'} + dev: false + + /merge-descriptors/1.0.1: + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + dev: false + + /methods/1.1.2: + resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} + engines: {node: '>= 0.6'} + dev: false + + /mime-db/1.51.0: + resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types/2.1.34: + resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.51.0 + dev: false + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-response/1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + dev: false + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /mustache/4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + dev: false + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /nodemon/2.0.15: + resolution: {integrity: sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==} + engines: {node: '>=8.10.0'} + hasBin: true + requiresBuild: true + dependencies: + chokidar: 3.5.3 + debug: 3.2.7 + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 5.7.1 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + update-notifier: 5.1.0 + dev: true + + /nopt/1.0.10: + resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url/4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: true + + /on-finished/2.3.0: + resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /p-cancelable/1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: true + + /package-json/6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.1 + registry-url: 5.1.0 + semver: 6.3.0 + dev: true + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-to-regexp/0.1.7: + resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + dev: false + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /prepend-http/2.0.0: + resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} + engines: {node: '>=4'} + dev: true + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /pstree.remy/1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pupa/2.1.1: + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} + dependencies: + escape-goat: 2.1.1 + dev: true + + /qs/6.9.7: + resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} + engines: {node: '>=0.6'} + dev: false + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body/2.4.3: + resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.5 + strip-json-comments: 2.0.1 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /registry-auth-token/4.2.1: + resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} + engines: {node: '>=6.0.0'} + dependencies: + rc: 1.2.8 + dev: true + + /registry-url/5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + dependencies: + rc: 1.2.8 + dev: true + + /responselike/1.0.2: + resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} + dependencies: + lowercase-keys: 1.0.1 + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /semver-diff/3.1.1: + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send/0.17.2: + resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.8.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: false + + /serve-static/1.14.2: + resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.2 + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /statuses/1.5.0: + resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} + engines: {node: '>= 0.6'} + dev: false + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-json-comments/2.0.1: + resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + engines: {node: '>=0.10.0'} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /to-readable-stream/1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /touch/3.1.0: + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + hasBin: true + dependencies: + nopt: 1.0.10 + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.34 + dev: false + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /undefsafe/2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + dev: true + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /unpipe/1.0.0: + resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} + engines: {node: '>= 0.8'} + dev: false + + /update-notifier/5.1.0: + resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} + engines: {node: '>=10'} + dependencies: + boxen: 5.1.2 + chalk: 4.1.2 + configstore: 5.0.1 + has-yarn: 2.1.0 + import-lazy: 2.1.0 + is-ci: 2.0.0 + is-installed-globally: 0.4.0 + is-npm: 5.0.0 + is-yarn-global: 0.3.0 + latest-version: 5.1.0 + pupa: 2.1.1 + semver: 7.3.5 + semver-diff: 3.1.1 + xdg-basedir: 4.0.0 + dev: true + + /url-parse-lax/3.0.0: + resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: true + + /utils-merge/1.0.1: + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + engines: {node: '>= 0.4.0'} + dev: false + + /vary/1.1.2: + resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} + engines: {node: '>= 0.8'} + dev: false + + /widest-line/3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true + + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /xdg-basedir/4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true diff --git a/w6/static/css/styles.css b/w6/static/css/styles.css new file mode 100644 index 0000000..e85f638 --- /dev/null +++ b/w6/static/css/styles.css @@ -0,0 +1,154 @@ +* { + padding: 0; + margin: 0; +} + +body { + display: flex; + flex-direction: column; + align-items: center; + background-color: bisque; + font-size: 16pt; + font-family: 'Smooch Sans', sans-serif; +} + +a { + text-decoration: none; + color: darkturquoise; +} + +a:visited { + color: none; +} + +#mainPageMain { + display: flex; + flex-direction: column; + gap: 4rem; + width: 60%; + height: 100%; + padding: 2rem; +} + +.jumbotronSection { + background-color: beige; + padding: 4rem; + border-radius: 2rem; +} + +.searchSection { + background-color: beige; + padding: 1rem; + border-radius: 2rem; +} + +.searchSection > form { + display: flex; + flex-direction: column; +} + +.searchSection > form > input[type="text"] { + width: 100%; + height: 40px; + background-color: transparent; + border-top: none; + border-left: none; + border-right: none; + border-bottom: 2px black dashed; + margin-bottom: 2rem; +} + +.categories { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.categoryCard { + display: flex; + flex: 1 0 40%; + flex-direction: row; + background-color: whitesmoke; + gap: 1rem; + margin: 1rem; + text-decoration: none; + color: black; + align-items: center +} + +.categoryCard > img { + clip-path: circle(81% at 0% 50%); +} + +.categoryCard > p { + padding-right: 4rem; + font-size: 28pt; + font-weight: 700; +} + +.goodsSection { + background-color: whitesmoke; + padding: 2rem; + border-radius: 2rem; +} + +.goods { + display: flex; + flex-direction: row; + flex-wrap: wrap; + row-gap: 2rem; +} + +.goodsCard { + display: flex; + flex: 1 0 30%; + flex-direction: column; + background-color: whitesmoke; + gap: 1rem; + margin: 1rem; + align-items: center; +} + +.goodsCard > .description { + height: 100%; +} + +.goodsLink { + text-decoration: none; + color: coral; + padding: 5rem; + padding-top: 1rem; + padding-bottom: 1rem; + display: inline-block; + border: solid; + border-radius: 1rem; + border-color: coral; + border-width: 1px; +} + +.userCard { + display: flex; + flex-direction: row; + align-items: center; + padding-top: 2rem; + padding-bottom: 2rem; + gap: 2rem; +} + +.avatar { + height: 5rem; + border-radius: 50%; +} + +.searchDataSection { + background-color: whitesmoke; + border-radius: 2rem; + padding: 2rem; +} + +.goodsSearches { + display: flex; + flex-direction: row; + flex-wrap: wrap; + row-gap: 2rem; +} \ No newline at end of file diff --git a/w6/templates/categoryPage.html b/w6/templates/categoryPage.html new file mode 100644 index 0000000..e9a9f2e --- /dev/null +++ b/w6/templates/categoryPage.html @@ -0,0 +1,31 @@ + + + + + + + Goods page + + + + + + +
+
+ >>> Go home +
+

Goods in category "{{category}}":

+
+ {{#goods}} +
+

{{title}} # {{id}}

+

{{description}}

+ More info... +
+ {{/goods}} +
+
+
+ + \ No newline at end of file diff --git a/w6/templates/goodsPage.html b/w6/templates/goodsPage.html new file mode 100644 index 0000000..28d3c4b --- /dev/null +++ b/w6/templates/goodsPage.html @@ -0,0 +1,35 @@ + + + + + + + "{{good.title}}" good page + + + + + + +
+
+ >>> Go back to category "{{good.category}}" +
+

Vieweing "{{good.title}}":

+

In system since: {{good.registered}}

+ +
+ + Seller profile: {{user.fullName}} + +
+ +

Description:

+

{{good.description}}

+
+

Price:

+

{{good.price}} CR per unit

+
+
+ + \ No newline at end of file diff --git a/w6/templates/mainPage.html b/w6/templates/mainPage.html new file mode 100644 index 0000000..3020eb0 --- /dev/null +++ b/w6/templates/mainPage.html @@ -0,0 +1,58 @@ + + + + + + + Main page + + + + + + +
+
+

Welcome to our store!

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque labore perspiciatis ad reprehenderit magni, fugiat eligendi! Porro dignissimos rerum accusantium!

+
+
+
+ + +

Search for:

+
+ + + +
+ + + + +
+ + + +
+
+ + +
+
+
+

You can choose from a wide range of categories:

+
+ {{#categories}} + + {{.}} +

+ {{.}} +

+
+ {{/categories}} +
+
+
+ + \ No newline at end of file diff --git a/w6/templates/searchPage.html b/w6/templates/searchPage.html new file mode 100644 index 0000000..adfee0e --- /dev/null +++ b/w6/templates/searchPage.html @@ -0,0 +1,62 @@ + + + + + + + Search for "{{term}}" + + + + + + +
+
+

Search term: "{{term}}"

+
Searching for {{#showUsers}}users{{#showGoods}} and {{/showGoods}}{{/showUsers}}{{#showGoods}}goods{{/showGoods}}
+ >>> Go home +
+
+ {{#showUsers}} +

Found users:

+
+ {{#users}} + + {{fullName}} photo +

+ {{fullName}} +

+
+ {{/users}} + {{^users}} + No users found for this search! + {{/users}} +
+ + {{#showGoods}} +
+
+
+ {{/showGoods}} + {{/showUsers}} + + {{#showGoods}} +

Found goods:

+
+ {{#goods}} +
+

{{title}} # {{id}}

+

Category: {{category}}

+ More info... +
+ {{/goods}} + {{^goods}} + No goods found for this search! + {{/goods}} +
+ {{/showGoods}} +
+
+ + \ No newline at end of file diff --git a/w6/templates/userPage.html b/w6/templates/userPage.html new file mode 100644 index 0000000..eb69037 --- /dev/null +++ b/w6/templates/userPage.html @@ -0,0 +1,42 @@ + + + + + + + {{user.fulName}}'s page + + + + + + +
+
+ >>> Go home +
+ <<< Go back +
+
+ {{user.fullName}} avatar +

User "{{user.fullName}}"

+
+ +
+ +

User has {{goodsCount}} goods in our store.

+

Their goods:

+
+ {{#goods}} +
+

{{title}} # {{id}}

+

Category: {{category}}

+

{{description}}

+ More info... +
+ {{/goods}} +
+
+
+ + \ No newline at end of file diff --git a/w6/w6.zip b/w6/w6.zip new file mode 100644 index 0000000000000000000000000000000000000000..63dc293ecafa30fc6c7f18b9c4ad39782b9fb455 GIT binary patch literal 36436 zcmZ^}1FYy!yDhq~mu=g&ZQHhO+qU+yZQHhO+t%CXoR|CG^ODzOwoNnoH8UAwd}Fqi zmjeC+3GiRrm5a9Wf1munJFtI8Cuaj^3nM!D|6dT)e?Ue~PX7%={&xu+pb*4BnOt2+ zzYYihKdWT+#848li2_kQ)g+f;bKU{pj zdb8$=1YTt>2V0Kc@d{gkc6tikFOn$>SeMmd8TCIzugXrD5BON(FRlP@`B(5D#Ii*o za**|G6DWrhR^U0A7eLy2%lHX|qqZ)zt+33HH?nBgFcKUfSJSVi-Nv`T=>-*BmN;%D z+vuBl1J%p7RU|;|5LYB2Rk4z)#kJ>QZUF2fEw{J_!e$RYyLOuLdZidl^zQ%Z**INi zCs7YQ6BSVHwWDCL2)6~UWi8@QT2iMETv=+l>DW+9b$Vu+B{WFhtE5EWls>Q#668x& z5+X(hJf@O1ukq4g)<-ElEmn^%V*h*4|DtPRw*Q%C4;Sv3k$G!Mw|^)ikQ9Y?HfPaK zi2k%k8sGU@PK0IRL0;dWeT%yQzRozxz@(nZ&{^RKgVWL}YK%(VE`-qdPUGeRS){!@ zb^Az(wt$W$9$b*82ULWpwc4lxq84@QyY)?0HC8`{s(`Ex-d(sJx@N1y70ro+Wj{Ky zujKL;dmg+_r*H+CN~K;{+B7wusEUf7(lZ32V_0DbT6>F%I{*rTs|mW3`56JvKEmboR>2d82eMv(VBIVxzzp)85TwL@^#V_b}>t~;x)i6 za^(k0HwNCM=myMLgnu+rvXzL3!Hv}?-@wGuke8s;k}e@nGcp zdwGMYlCRpBMmJ$A7HKI!Z=OZX@3E!uHGv5vQdKY`g#WhxWAy@v_f`RK4eFP36uFnX zK6q+vYbh1vt?ZA$#OWU!v0DRS4;WVdcZL5>a$o}!?WJHfF)Y$vT>@02qf0<>62E+c zyAX10)4OR9l94=p8-0+cL788}nxERY@`a5LPx(<=|>=E!P}xY4EG0zChR`Mc>FBV|is zj{fa^+6iy0*L>l~I|VcgX2VENxw54PL_gg^^ES^dS+9LEQXiH{>jh#C{mzNUV!;OS>^CvD426Q+8xS%zG-$JQ{pRJm9ibyioX z{NQlONG{d@AW$@zJ(%X0op8K2R?;e+x!opZ)WAF&QUDT_q=2CS+0{TKV~6HP{-cg) z--`KV+?5Ke^_ZJgmpc zhi4n|1+GT?A1tTG600vfh%C5leH&&&Rj$(N zJwX`8?`#gEnV8)gbDE=AYRhVkXK#U&Ok0oR-G3CCRNMFA!PH3}z>shovMKNXWa8{i z+M@*c6$cc<>vR&XvA&fZY*`jsfgseoaCA$@M}dq;+-u7SWA%fylA9;gK8u=zWRS=v zVxJkLdFe6Ijw%N8ya=%Boa}ITaZNXO=>InPEr`RUq39ITEyNAF^N`P(SE`xF@faCy z%@c%=EL6gg5qdvd1W?){KXRQBipi3PE-8a*>=UuqBF`k9l?L~Y_Bqq?Pu5SU_aq^f zj_as*)fXZ=NPK7}H$vldYEFG{YU57`{Xvq^m5HRXpMpd(gNMq@LR(o@_yK(hf%cz# zB$bV9he3Op^^gf>hWYCwLb}ui+v=IlGt0UCBsf{nr-|YE0QG)Ydx`d6CiXvl`W4hb z`6D4($_5w!KmY;&0PTO#%f`UM_W!V}Sk=aElNJ7lSO0f^0PuZbqah8Nig9u~-eu6= z7AF3W7T>~>#(`u4c3gwmpPySUNy{ttg-915=*ibDo>y5Ytu(9}C+)0Gm7fn(H9Iy^Rla@)sMM}-u~H{0qqK|CuxOns z*eYAiD+RRCuBpk1A{_6{lxnr1XLej4jJ8#K|I+!14Zaf!gVjLr&x3Fq{XQz`^mJ4;IXb@ziMV~RXIS{auGZzYXxDL4n9L7ts5Zf%tOe=gI8XEhs;F`=r z36lp^j8rtb5^#v4yOl4Z^qs55X71q(DD6@oxZ0oJ46P2UJG-j(JU`oYl!rT{srY5s1SSxT(pmiuN`1_MRpTH-_dCNMDIL&orU^L zu;6|w63lKDvKDg4mE_A7)4GlQIDPuyL*$T;F>{>5z|63AHy!b8P-kJ_+!Pa>u2@lc zDjdID%b!eYo>ozR09k7_RV8{2sU@45prOE^fGw4qu;*ef}70^sgcUdgH1!xlUGWb z*{AT}6=a+SBkkEad9*V zc7{jQ=s4TBtm_4BH#x^!{O_3YKMGX_Gf>VjyJCF!*8rBl0RS-mmqMLP3>=Nj|Bptq zRki*rJox?#4`u(tgH%>E4VFcgO%WQTmD<1XFv;I6N6oPQKukh_{`-nE?uuHQu_{`l0K`@Jdlf{T4*qKB>o65$mYL&2s zJKBJR5dAH!RoHj{k`#>85OKh5aGo_4MRmX#R$45JI+?VIocgSZ`kc5dxw#m5ovuJ2 zlzG*EoiUuAX0;BSV$>9&r#XVe0E~L+)-v(EuYdvsOSX3BWv9;X@Vry@s=nfV1lTcZda6GzS8#mK~ zWQ*l#Op)#KF8xlMj8aggVW(TtrQBn4FM0YMycpVcD)( zZj;+VY7_gCeY-ZOy{5fp{#?Ou_HURr#efQAlK(X;aT(Wxb<#|R2~UhAo^vnF=%Q5f zP|ycxbp65Mccf9hrK8A{U|{f{#@r&=rYlLo3a3^hYg6e_El7^uJo3ci@W}?MmNQg!O$u3@-82d6fkLB~9h2XYT=(s5pM$Gf7n?*tT{pNhzQ zUM{T_f+5t{f;mm8P(qYLa6dfr#Qf0pb+Wok+S`xrOLCy%a=DEbjlD{%;{#|*&Bv8^ zt&z3g-p``TYp;r|=M#$P>JU<^l62JqCYD9dzu3oE^bGjWBf!Hx7D!73pUf~sGMLfyJ(pbc8KYrO;7 zwvT3)AH$1n8Y$T}ZleRqqHs8<(r>&PlEkpd2tlmo%=f}lyGQT+iBMT#PS0;FggiY@_8O~~BLzqM z<{;0;Q>p+BV?5KOVRq56)7A>SNax*!Jfng=8Uz59h%Q!d%2|AZe2f)I&m@n0@k+5q z_EOVbz3(r&IY?^5TQ+DpbS)V?dPRyWH~*#l0r(GzrNIr9s{*)ANdCDz*}nnvZ_pas z8CjV)TA10|IhssP%1Ok`PRmhDOVFGgJC4iE$kIqoPDvaeFGvA8F)ltnL@5IPr{2K7 zdibv1khA~lFarVr{MRB?_`l1UT3DNy#7;*J&?ASuhV%^PL#dG#S3|-=gKG*5l?w}- zpc9t>Mp+UEZX~0T%$_;p$DYUq)uoUdg}(In-|j#B&`!LgeNB zG6Y)`9UuHDe-{`>oB!AmSGT#G_cx`Gv16yzexBSuT;G*HZ#h}9A!|sxEWyL=Edu#vZ^>y5X9`lLptMv100h`;ksOl0r0jM9u z#oxTgPdN@)JmOrWq)h)@lfybCC&yP|h9#S=Ct6r@;c1UoVdi5I>-Fy4uKOjBTf3Te z{&d}XVZzO;qkH}6;Hj|T%f(wM_p;gl{ciXBSR3B&_kQKq6NUD+YsWe))_R~cr5^_a zf>Qu3e=@uZ1XM=6h|2Z8&vQSz`o4@il4jxivk`cx)$e6Ya}5TV-e9|Xj33a{1sp^m z3cmwoeuvYqw{%%n^LQzsHjqPkj3!?zxfrzzRS3IJmc(9{YkE=l8`_#*5!g=u*+ zR(n#(qaA9nRQR!xxCk>|jZ?I|V)MLbUlR^AKn|OSQKbcXYQ5)1+^Tm~iCf!$0Q*vD z$JL2~t90p#!@1AkGN8o-K#~9;NEAVH1;h9ed-wRP-_sHCpq0=WfEa=fsHt!e&uBge zhYD!ZG?1<_GR9N%<>~QPZ_9Oa@X;N&wfohOU#w3eo44Zb&tX9y9vxX9t^1{r^?55O$ZkOEoo4OiQ@Sx(lP zYi99r*xP3QIMfK!I4*(|!037!87U9620$>r9#>Ha!8d7rdRXdt*=HeC&ZX0mpaheB zO)1QMAHC#~g1@`|FQH_4otv6yQ3y1qH%GchR!_$n7HkR@AQ%ZKy?J?dF(GJj61w_wqrjkTJmLH59RIonesUB5 zc}c7#z6;eJPY`1Jnc}mZ=J_vE{ihxU^3PG=kxst7_5^5AN6lb11GqeSFcd8USRe*O zlTs))KALFjRmQ+eZ#NeW;iIWdZQ+a5DEvX8wd*6NZtg%%aJa1Ab@$oKnnZ6b-G0Z- z9o&U{V86BBY+5P*mR^%jyXNa~EiC>8hhI)T?zvAoUwdQFG$(ip|4-i38>4I??rd&s z7@sE!PR+~v@xw(yj$@b=|MotbpJSIiZwvTw4_EZ5&?F34X>VgiCD+gMbL};0_lDe| zb8{^#BH|D_|DX6T@cD>2BqT6^PNc0|%BfdJup*3MO+|o=XWS8x#%@wna6);yw$#u@ zu8SCo^%z44gM;w7P{UCt?N=Y2pLxIRZyQJ58@2bL84`I1qQD zxA41&2BhImYJgq!zR=ACRe57{SB!WE*+q>%@=a=ef}2Fs6a+!;Q-A1_-onR2A*8Qs zc3Xq^=mt!=P!cP=c=f10_}sO^<6kS}O8|pq{i8dtsYwP#Gz6b`K>F`{0cBwxNxC_^ zSem@KzbNeg;!c}?wVzHp`((=$nsKQi+CB_VxQG3s&mt^AaTn#XnI5sx`l2wM8mjQ6 zlQ(9QYF)WyxJnn29h1xSXf))QD)`2jFm;Xp`Rp+UHxsI^+!5PA_Z2=99**eOi6>!; z-*%h;g)_JRaqsH}p-ptHn*M-QKPn_%gAsmq!^fI5ZH+Gu#92qRQe*9jTfOa;Yg95^ z8N-mm5q9R715Gx4F81k3jhTg33P{dBPC(Q?9ROT<$n0%w3`Vs!3p1!)7FUCaMG#&e z^|I&!6EBN?5Yu?{A*}nF{sO|9+vL~~=<;qqNJEDX#-q!4I3($I0HyDFMc1`I&Vq60 z9?g6=8uSe69_g7Hw;Es5XCBqxS z9K2c^hpA$j=z(hqiA{3J`F=q|HrZz3W%HbYH*f7vhk;J%h24;2*AVu@s|m@bTz!{1 zz9eQ~1jkh8EPWR^CKt>Q*V}Jt1w(Vy#)!ks%{e)38l#}5&uv6PeVEBSpGkH=m>JXPf(g)E;H`o3kM#ju?TMZtosd#e(rgv&Wu^wI8$aH_HJJitY`i zX9^sEL~~I1oU(jkVD1|As&5$>DJP$Wmv8*i=PP$m-sAg@`2? z%b-{AUIv@lb>iGc!3pLi*NG(yt%dLdIk}PH3nf?3#)Z%@iP+IhVx1yUe3pV=1x$N* zmypE-QeM;uz4Mx^AKjb+_czf0Y0akI{J40`IqWglcc}H{h1=gq(S@svcY$@?EHhH z9ugHTptG+Gcw%NL*(dld_z2=wC``T3sIbobYEEJqVNOB{AjA?t(%^E7<8;JuvM#Z= z^hLBTPpl;%zDth{Coa>U&sKNss3N>5zw8+(=Rs`VlXx+{Gp4;PUy{997N^Qmx_KHu zNh(v)A6Y+n@cgCkNrB)Vs35Qfw45L%12PD0Ntm&r;wVvR+)9#tC0&%$$5MZXv0O}5 zQWKGrNIWdPYz-DrH8kkKq_D9SD zFguro7NT(7@Iuv;1JJgki&J#%vSHXJzfC&boT?7Tpe)5;t}vF+4Zmomm({}vxR`U^ z2{C)HQz0XBu{Mw)dl2(d&N(fJ{yuV|aOb~CKl@FQI3leENdgP5OMO>|4c{KQj{l-g~GYa`7R5h_#Z-MPCce${ZRHJ)sF=0w;j3LC?L5 zT$Szy0|cVye+obbo&|-l9P};PfVdho2A#IU<;XLoOVv`7=XG@b6({MWN^lx%7GT6%!Fp*0NhH7c)ckgLk$=jUVvfyc)mAq<53}xK=yrN&5@%Zgcb)ltB)Qhgk8H*lUF@9EkVj(`5%NY)2t9B_eXRxjydx+5f zWLLNou)k5w%cqE$4j}0p@TMx zPFF4HHm8I#H?7lL-vVdA3XTO_)!J7Xf|p#y+JtMsg+k=h1n><`HvtmcP8@r>_oLI= z4Mwdh?-5dRn;%%b2F#Nin#vNfD+MmoR=b_<;^s3=-A9MR0x?ACL5;Mu17cGG0vTD3 zK);pSJnZ3ZxdVm=!fu$ETS`9)+xXcY(0NEzZu?kGx@I`?JWDu7*8Hk`6--+K-bb0R z+<(WhMp)@afPsF9R!IjS?;ixy>LdS-GZ??&q49L7iVRPT6vcZ_VInEfma)cit%Cba zNLovcu$>F#l#a`CbtEP)XL7fyd=N;)k0bHxR%I`ap8w91gqW>790!%TB-6vj|B;l$ zO0-4qR?;*^T3cyeoUn6L%{xsnvc@glX+XUojED2b}?J+G2Im-ZAh9>)wrjrdi}QLa(jLH*uCg@$-R22KR;g4GQBvo z7uyl0xme{WGd5Zc>QcPlru+>1B)SZIC@|mY@r)lxHoca97&6tV#v|e#NMH#WyZPPo zt;>4j=bqt&>}9>@o*~*zf6jGq4_p|SLHw9roO2G2HicC&0Z^eReHjjRTAVZvXNO~K%TTSM;f7+NFlVy+WM3=mu@qit#LfZZKY|Kn4E!Lvs6lNp~>g4<8Q>o zak4tpmIztjuCJN@lu|jyqz`9rw#TlgarY@On=1e`1e!I)O|mT~9$gabi;!5dJ2(Fb zH10m?z3}r;wnvcb2CWP8L?)WxkUwF|-e@M7gKE%V!azeit!ex&AJ{Y9vO2d&I;Wgv zELyoOX_+lUyRKwUbBtD}YgB3c0M6wf8KuVzYgz-j7XCT z@#P(`e*2)FJz>YqI?7ld)jxSlQI(599(^3a4la>)Sr0OZaw4Xk{mz^8*@eOsJF;v# zS@p|Fu~1`dHk!Nhpa&F}>-pdQg*_p{FU|4vyTI%#5)cpwKj%?*vam3oHePPPgv5=` zeK>w~bE6PEiPZx_Pk{kLJ9%A!t%21AYaLE7s91DJWv0wA6r&uirHuL(Nsf{f_~o_6 z;`@Utab$iPH@LBq8C!3TixCZ%5>v8*Ge$ugPxNrV&jzfZz;h zZ9J03Hs4_TD6gfY>kxR4Ly^~bJ*UmMHH97?tH<|ffSgnCs3jwavjNaEWN;*EuuP~nw z{0+rC&|neOd3L=7kJX!K$TI>iNb}J2#kFEs=tfBWU}|)V1b}GMUd~hu#==PrQ+?q( zk8+)`&TTb_2y_*Uy7G92LW6e&dhcoR!-G?Re5ymsGfRYlezC_tW3WRKeK}T5V8u`Z z9kJ7=$}jRcTfjPB@H)L1U3A1Owj|)E3@nYIARJ>Yfqd4j64R{0iT$WY>R&pCmN5-(nb;K`@ z#%FbrtAP*)GFN7F&=ztXAJG+ZR^|^M(A3?jlEM*hq94t`r^;P2{`TM*V8L>Vo`*1> zJ+j&-FnG#+T%Scgwfio0lbf$Pe%?Glz_vE_|G^$e2CPutmO`6j4Z-;MuqmHtar7t!@fFw=A~SlFTv1> z{-y$d#sJ42>LhTe!nRyP`T1#Z?A)731njFunQFC9Z#SfxEjlN~=t^eSwb(Q;u*8k@ z(iwq=i*k> z$gEjR+r~9a>vX6ruApb=*!h=}s4; z*W@YJ1(VV)ZUW7<8dQz9*F4vSbRAXgU`t04&;5xVr^gdM5wJ$P;{VsooYTDA$>GaCuzVP*M~s12jj zLLx7>Ng>biDG$8T31^p#oY~ST=Et(ykAfuEQi>I8UK5wN3;v>-hBz93-H-|?^(F|! zmh&0e;4p#vwL2=$YE?j#q~2wz^k*tiAKEboV1HfJ^Ow6}X!0p~M) zy!0a=$SSuE#?I{UdH4kFvVHwTx{)`rKj@-?xt0((Sq-I)s*AKBzEC=VvQCUxvoGdu zS}_{r+rTT6&B5stmx!W0&DCkSZ_0V@0HjGe2`%_uYsT8-UufRd`(s=ySVn;7y^#w- zdBMoKKtFhu?$%qs3JdP%v9FX43h6ZpJY=(xpy118w(Kd8oGF3poRi6j zLsh6{BvsmG1sS?zMqg7cQPDoi^xI+N$v0V_hu5?HJ`ABXNnSB@M?RF2Y?etyb+;KA zV8u^|?bg!kG?4w}64ZEWFCe)V;(FU+$45vPOv;!}C)MH-N(g0WmBQe8HkN=qi%M!I z%ML}Xa1n}}s$s~B@S`D6>%MkltnW1T+Tl7LQ>oQ-c>Q_d;z!iwKRUKxt&C2;3_ zR7($iCpmB~ATzIsX5qcBQcHXq9~JZLZ!_q6Ab6lA3zr9As};p@G=xcb90=xVdWpxK z$W>U}cF4odjPePc)0!NaQ?#gt#VEq>T6o_Q0X3;u}aFUO(A1 zdgm1ZpMr{)FbQS*Z$Pi%zHxoeT#;&dNQ7O%Zn#h;?4o-KC?32CZ8#siJdxWU@9~A! z-FV_eH)YxMvlw6q9TQQJ$wN%NukPDf6IR#e~SKGxv_sH0g z6gltsEX-IG1q`ioEbu3f>(}!mxJK|oYC_bx#VWRkarfeQYVt=nYIQYE5bG0g12KVg zRXlPQ$D8n7LB2A`R_2KTqZFUK@6vY&du_)0<90O!ur)e{2m$d!6r)f0Dlt1T-F0m< z*LGr>6If5MLrc?MGkB?b+VjJDog(M}hopKas!$@L_m+df0bX?j*XEG&cLDe-mbP6C zsc$0agxY!7r%7b4f2(!a@cL}k4pBx*&Lf@&*1FVPd~l&wd*gJDz>yzxC*Q+Y@4|LCA_;MB@LEy{fj)F0ebI!aIi3&w`dmjpPNaZtF~nQdcZXxqY+zHt!(VuzZvjn&w-m(<9YU_(8jLGz9V0%Rm8b3f$y8s6n{4>P zR0FobUfg;0K_B(-lH!IxnR8=?@Ce{a>3o@?nSqdX3<0f3RS|G}u;*07i|$^Ud+FTzByVWgTN|Og)jKfiPd0|L*B{II*kvuk zsFlCNcK|jLt%T@_{-d2_c5dt?s04VUU~C@23nnf}O^!JcNY-%W>m}j!)`Xd=1NJiQ zhpQHg!Am+%2tb8C@G5v>(0vvIVX$cfOlV=VMY&)TTT|KCuK>*AHu}!f`jx9%48FUL zr=lXRsf?EJ3xdY*-OZubo!($m{9l-a71b{5Px2rG5s|I$=MHqz@1GJjf!-p`pTH3I znSt2IOqebazNSVpFNWdTx|$~_*&GZ}y1*kgq>V3uS9DO_ks(r^2!|syYH}5)>AiS5 z7o!cKfG`e7oIC&u;PrSxAJK^3U$Ocw z%RN11nKRQV7;cbopnBqbduI((5g=~xBDO+|Lb9`l^odMF30ssQr${EkG=`9kY-kNt zjzm=1DcWZZ(@&OW5KzLT-COp&Z59-GljFVgvXEiwWt2MSzzR1%IC!JIhwan%s#_^S zi#G7v-X_s&6x6ru9GOQaJRrV5X3aL`f*KZQ4?l%RqNPX6h%v+-krv}`M3KXj$Km7~ zqvAAwZzaEZ&$@-#*O_@9`}=IlF#4rk3q-*QQy>qismY?8u-1V)WNdZo-Y?iCDAPUY z)2ki|yz{IMShL3P^HaTk_cJ-|Hi__Ie{v}HuM_{6P?w!N+a9N z_cHH!&S=fuuM2p%8wf+qDodcW22iEpe?vTD;1tzCs!;hdF-3syf`d|JXZ1HCK+whc z1EVD}xKoHZBh;8`8=<~3Dq*Hun5BE6kSw1MmM&JdWl$gK4qQulWyx>PN-3#ub+%L; zZG!_;gzdG2DbRp?)WRl7u{ieppPSo)yM!ukEJT$Adaij z_Q;K3&&cml);$ZXV<(w(&s%1*VqB*sI1BurB&#)ECb3L}F3b&vBrU?VTVgzq(avjO zAEA>Fyr%H|fx3On|9$TRDAS|NP7IekQ~9CeFqo2*iuCvkAl;&RA6gz3+1W)@=V{V#Gdo2 z)*IES#=&X5_-M&%9BW&^P+&#GFij6nH;#g-GPfS_~@% z)Kl2T?nLm$sK4%cCGSxZAQhP8>{=QGh~`Hx%RSy38X|zr%!rV&PQtH*E$V%o3g3Pb zMt0k2Q(^Dcc8)_wdFpSvCI`&*636I3q*ekPz#qbvEJH?d^p`RggLF_a!J3zJ*p4wC zoLgJHNPYr;p_G3`omnMNeY878O8lKV0+HBk*69Tg`o;LYv!`o|$(DS|h%relMmPUd zb99=C>U+mR92cZC4AzP;aMWl&s?@9%EGRzyKK~5=xvQUAvM=j^1{XquQtw?>Ahc*q z(#HnMr3Ca#hM}PUU@|4TSQ15RPHDK4R3&TP`%*eJVzd(&miP1$dOJVbLG z9@P>;uzXo#RNN9B?vZGm>PxW2*wf2aD{YJBfTYN6c`FWjR!@Ao?ZCp^34E)f>bmS6 zaOk7RlV{`@*hK4uq40V$-;#HON6k0BVJMHTTKnCzPYpYr3F7Bt=NWqEWH2UN%8R{h zEt~bF%K|i_zOA{i^RP{HsxxV%Iww7csh1UhAhrcB$FB%1hLzI_h<6;F;nl4Z@JE7c zLz!C6;~SUId?y{bl1%ejkY=k(s>RWuAkHPpN!sqIAg3g7(bow`R+=02*6-km$Z%Yg zxD6}{mRI|VTg<#>!ZpF!z63ESOW;HCW_$3Z?HY$8;i$i6^hqMKLO?|V{Voofm3Vy5 zQii6Y`2y{nau8V#g`9IOZ-nb~f7Wnct)89%iZEl>XhCN@Ap=T+l|x~6Y08!F&Ja^q z;-1)3WzXA@7g8$Ui)%x2DpfPBN0eYa&Z;2z&TvSyS>)5pp;1xt`MVouTdkxGxuJca z0*h}m+dfGcxKz#_i`etb9Ri*+8X-DIB!Gwrv~kMvh34Ij#X%2=;+5`IEX&OgXX-m| zgCTzgDLjAVg4;2i%eUFturrWA`hJ^_Ig>1E=kPE^@ivRW*Wt;NN8t+BFb>mc1YsM@ z0VH;6Zg(<5cskN$JWhXS69Q9Hfu>JUQEs_*WtUKL(x z=yQb;iUp-N(a*=~qtS6X|L4G)Q;ud5qie5^*HwYb9VNf(y&3ek?8m{XV=j`!_HpbL z@7mbotX^O%IYfX&KtRb3wrfQZ_RvD<=QKz`#R#HM{H6by2`4%?H2kAjH{I}35LIB^ zmw!kawFeJ=*lm(J2GR1JB#Y4OFYmeT)3)O`H!n$g@7|advTCEfLT-t>fC#rw>k5#* zAExoSR&^{IFPyn5&9znQN(T^|kP)z^#<2ZxqxnHOO-lFA@l~^&>a1W4yrZWWRX6-N6*}=sc39)Er@RB^!(A0{|od=A60R5D6 zWW0`8>M#?Zg6T=9tVMW+Vg=boQgsvj?d#^L`sgPdc7vg{W#?VkgjyH7e6T+}N*-K# z;{<)?F*&53Di%t8qzCqv+ZD?a=_2Pbv+j3vgm6JD{HPixK*`v0-?F)&Rz1Ok%`Do! znc+0<4tOIK>gBSu>P_=j7s4emEh#CAiCk4$x_7tF0w7W<+|y{iKS<_lDiPe9`j2za zrnpUTn8DaNP`dk>mDaAy?kt3G^v>Bl%qnhQw9<6zWjgg6>5_dVD7u`~trspOrctLK zrI|Bzq{g##vh!!gsq60dFet~KFgvG(2|Ci{b6t?t^N=U|h!Ebj*!Ve-E6??gfvrU- z91Dht9y#L!gf&xh@nY+FOr?XsL)IMn5&uiz-|zwhs$qd(oPnJwij(^=3xUzUqFAA9 z*eWnqdwQ>|FXUG9nvD!n0|)lX7zDyWzLDr>-|B8Y2W8;#u$JNKZ5!FHWaA?w&zU)` z!`e9IHANnbJVJ^X0Ju_0JMA6nVf05tyMV&R^zk0g@Pxci0ag)S;IV1ku7ut|#=I}Sgn{R~Un3kG`Q2b{m zEkiVy6Hmm$)~S=2!jagx|XrpHkCkr3xyDpbp8-y;$mKMrw|uLMK_%oo!L?JO}W?Cw*y`qGqt%NU7@ zwW3E`51VkfN$_^vyesx=e5TFoHL@F)vvCj%Q6C#@gk@AgdC$M4EicBJC>lRqtrf0T zL6MYXKC9Br)UOV4Ce9?X4!vS9o7e7|5SBkJ-|7OH6ErjDN<~@ zQC}DfyrC>_yD=g*O<55!=`JwZ*7I9p$gI>-N$Z$f)yha%yO8mD3LX5zBei+tf+_9SanZcw{;W^{VihHhBg`sPfgS*ILdeBeyg^g*$^gUcE1P*(b7_1}ws52Lsg9 zkUypG#C9zBFM@h^#3!%2q?sfp-YnS!WA25=;&W3vAvKqOW|(j3s?ZL_ zO<&j*pErCAg!uBkra~6I?FANztBy7UNb%njWY&3N`uybkW~AHA{gQ%N9rU$QLQV=p z@7Qb&M?P?nBqEp~j7u^Pq!~f+%EkoGXnWNLw7#@5=bW>=@LgA72gIM41B;y&k5Gp( zG*0HWjI&6+%=5sNWT}rc7=bp>rjfe6mof!o;OV z!mFswv!3HG0>wbAPd5&Pg5nVNC9i!Rt?4y71r(meS>yTjkzbhq&TLMzgq^rm%}CJR zL3}3*`s4R5N1r6tUaeW_ze&Vol#QOPx~IAZl_(FCVpP}J=l7thbJnN&o+y+ZC@OG5 z!&bi&buuj?>wd9E0ZTS*GnE?y!uKJay8s+IX7L)UD%*tQ?AF{(BpRMErEJd=rIV0x z$&DuZmuw!&FV_5Llrhx%R0|Uz?!Cniq!B2eaSJ6<;(<;Cd5#JoG&Hbd#>3o{lshW1f)rVk(pZzXvk4C#%&ov`5AMy zGpVoE3%JL&D;L?5@EPfgpEyfrWgg>5%9UF6Af*qt8HRUKO9vMr)khOPosU}Gdfa3+gU@KVC)*afepmh=?#MvLA{ zT!HoDd4(m$&mynz;fDHLnPr=@H~=7J(|!N`&Kn8GNc93*P#s?Wn#rWbD zBPfcr26rm#*W+fChy7|fbj8fJVD>LV$6?PtWbG8gu2hcpYmT1~l&e2WxF&1Hijo5k z&nb`B?^$yw&j(I#B5FZiVOXIEYRMmYRQ;BqVN)8htCAwwna-<39fnYb@W@0DEf9?+ z?c;*-;|oraE+0dl*{TEif(j4n=H39CXjvP9ty3jk#`pbgRF4eSi@lQ5qJkh}hjG+p z+qnVdEtJ0GXUN-@gI!~c{5Z;SQ*JpL`_6Q^yo)jh5v1@vGP(%Ftjln?pY)khilpDE zUX+?YH+vb>*dfHVW*0q3bA%n;x3#C<-?h;$F-qmG<0Y=nKOwxugI-3#FuTvC3!Rv# zS>Th*48AZnOH+=lOqW+CVeyy#3YW$6mP#K+01*?C^j5v3nPLAA0Bk^$zqU*sgmg;2^yBqBJO2jmAV#2^}EwyBBl5V!k zRq|CiJ+U69K64{{6f!~FbE2>TT~B`K@71+_)Nv$JsSxE<;H?b&1a{?EyhTSh z9rt_fkqYt7OAiq6rFyZT;fhK7g7|^qBWL9RZ&Z7DND-IBA6$Ld1>7SS9@y;1#9#=~ ztv9Ka^}D4Ml6gfJuhe~cS4 z8FMmw1!dHN1>3S;-s0CfeLK!pj%F+eOId3tA?g^6pc`;n2E{f}@GFi8u9W}G8mQL^ zoJt3;7$i~B(k<{MOLT3axILUU8keAAfzuBx0{)MvxiZN@E$aE8ugZEN_1q>KT4JF4 z50r)q>G@%$7pz^FR66PwnscqAQy*LDLN~=N@m?)NFwKauiy@A0)6CdBNjY5$c&JtS zNk44w`MkW^k5{nz@zr3VSklj}M-LmA0Ty?Ncd|T0tMgjKtsaOLLtRC?;{7t6K{LWH z`Fy9bFa_=RXC}FMy=9DFD%ssC@+1E&3P!h@IRL*!71SjFeAot)}Av>0^o zUBSD!VvZ?~p|}{$PMTAVqyyku%p})UTH>^^M5xsfLm4MddTsu{v#aTm++@P{NckyV zfekjE+v?pMlN_QPbHFy1Mw;{-I+pVDUjtQ8h3O7Gmz~|&w%dlHKA(C@*=@6%c)ji~ zMZM>hwoQG!FtQDV6N{)+#qic`Kuz5uUk>H(BGQJJCXHCqEoCKoW3zdY+3jDVH5r!y zi~~c_CxB+M|7EENZ3)0tU`W#6xxqJF5c?C*;|w^bvdTkv&r+|%LGg~9YJn~ZZbbVO2OS_ruyyVHc4y2nwIZI)rD9X@Iu@zbHta*U&wg5}ui6-2 zc(!_z*6m6OJ-nKD5~AMakkR2!q7Fik2`hvvo9IwDxgFQcQ72NZ3e5RA07PuV_d1e< zn`kPgv>6ykk#1NLr{W7Z1rm$=2<~wCp*u4!2Y+pHR4q_%=9ZlU3+Y$f4K-UCwHZqR zzfv>hpA!GqW>{xf*>tRa$NMG)U=tS8@uh0#C7<48bNbY@u(@p{BOVnmp6vIt&H2KarJPSb~*k{bK`JZ3JqRP5@eow zvdBrEcsowYcV-059sPMMP#(pU9CCRL%8|ibp&mup)=6^+Zpq_iWN-pHueX?+LeAc>4*K^8O$l?~X=v$mGeid8Bw|yuv@dJqz zCht0hQxv8;@pQ1 zmBYf28#0)AJiw?z<2mD(!?J;g@#6x4%WFeT03ncr^T}JuSeI&Jd1vr=@IkeLdri~i z0^j>%7GKi0T6v<(CH4buVzK=ucV(S;&H4|gUt15f_`)_cm=cS9r{ag~+u?-pyCzi% znH|QfTuwJ7@i5Q@^70YNN^nczPrA$T?tE@Rojsy>tZ^)=xG?;BCLIN`r@Efy>ZOl(+)nC zig*T@Mj>bR0t8XF-nQo2qf7du12a<4GlftPONt;WqPGuMsbjewiRr(dyyg(;z&A zJ&bT!Z#2Kl29}lSRn9vdbCkcQ5F60M{)R-qCbITuu1VBR)CceM3SUE8Lx@cCV~oE| z??{D<5+fpj1+_scdoZHYV5Yu?dy+bk6ZNhAgY%`pRilKp`y%DMcl+u?{6UW0vKZM7 zYMy)RyL{C8VoGZ0r*C7eo}XO)rxgU?B_!o}Mli@4I$@0&Y1=*X2cZ&5Q5O&a{Ewso z3W)OitzdAkGO8g9E0JDa;H291(gbAdRw7FZiY)$w+G?I#foO)pn}}-?Ub2`E@d|}@ zFIqbcXW1ZOYID}?+I4Chte+VoyT$FwGZpQ|>RxVo{}NunPr#S8+-I~Wez_h?*&hc4 zz04a=3~C?f;pa>x@jZF-DeqlQn+B>xK0&6_qUgC`>;T<~r26rr zOpH9h4;f-*;W`;15p&!5>0!dJed8A($z#Uk#xY_@Q!Ytnd(lW|Ph9*Y&_VcYk zHF{M8ED8l!Dr|kxW{XYtm>mBjhXjC(9lK@^dw-QIh9?Eoshe z&Miz(voX`|qywnuHte0%%5{sG=h51J>6aHPK!Z{8+gKx)gQW-AdlIZ1xgZD~ss{u3 z`L#ZZXaPn8W~|ze&uek}o`R2{y~-JdMe^_XV)$yG~L9n8nkefayd*;+z%-Ad9!(|L%n=A&3ZLQv98}MV+4LB!1eZ`qs zb-SL-={}mRGj={T>pVH*&Zye7no z-_kxtQ;5D3$5R1iaLz8fj6V5zf2LRJVGNl<53h~A7o6wkvz~!*SP3ExK^JgFIVdfT zK=8B+*aQ=nA*Q`zf-~0-fW0Lj^9wo`Rybm_qU2Lwl0f`XwizfNJg7|e?2Zy2ncpbk z!_aMSJ{qD2D7J2^kj`ThICa-%KMz5t_G##p>P=_XZR~nEt9}z=QTvOasD2u!I`a=S zZ$3U2Aukwq@sbQg@hAR1kxg(Hj|AyVmXgX6`x_zaNTM0VDLg=OUFnChVfhylz1)%j z5PS!T)rea`o}E2yXfZKGmF_- zFJ@6biT{ zz!Arz4hp1ZWWAw;)Kn}aR6m9^*_^OFyb8jVvI>tMEdZG@!phjDD41EGh?D`kDtt$y z8XCQ~I5bm8&8ERyw5wj6T4bku|D>|RX`FpBaoE>>)sxb0buag_OEcC%^1&|tN9$xr z?&Khq=Rbn1VXA@-j0Dk2g%m2F3{w-S);g+&6ogW`E}7(kCk5o7T|k;ZhQL zK%ZEBHo^x6n)Fa#a*7zq(q6*Ud2|8L5CAP9pGmZMel?)WBWCenvgZdGSXE?;JYelI z?-Bl)$k&R*czoYRJ7|2zsu0(qwf@InKmT<8{6A1j0|XQR000O8BnM$s@g(jsSOWk6 zyb1sS2mk;8X>Md?crI#lwN}e+(?As6SL#0uRu{IEPS{kUu|gL`MIb1ZN>^1yTzl*o z>=}1vOo`Hb1ABJ-1>eID@C(eHhabTStqPmibA9i*XU;vII4>*4B_dxcPJ}=yXC?CN z$_saQ?DMh~GK%NKCb(rM0=$#8M4UuPlJoNgjYoQMk{1M4Xk{x? z-FSB=W>iQNRTY{#etw{ys0gkF@ofw%Dl(6K50A~A7j&~4UbyB3p)pHH;x84TBvjo_ zkmNN%D_vtcYNAtgcyMso;gLi#QqkAv?@qDamfs~0-804#fjdls)92_irG2IRStoV8w@m43)^@zoJ&gbvk-j%p zbX2Ds01*KoE_ZhjLa@X_so=YDVh);czX3M@Wt7viC?j|-%fbsrS_|D}wcaXLRT<-p z@xCyY_ri+gJYv*nio>hAqCWt0>@3(bgJ-fU=UF$ns^Wz>^w#OIx<$n z&*WT}J`EfTCj%#H3?$ZSIh2)ZDad-}eFSrSdZI0n3r~i)kBkL0A?+7 zT9dFXZSO2AjnhfER*wJF?z_)Rb9TI7F~AGL*s{_b6~!KvHs4C1OSV&R&eApl$H>+$j#l6KJGKFjYh)J}Q_!q)=&Y|JMN1r`l z9^J{hDhMAwIw)P69E9wPZ!gEJrqUh)?#S9S)QSn%oFEa8=iAR&wUZK=LBJm(HZ|{6 z6ifDo-4cErslT)!>=p?*P_n2<*iOLUDqTG9QTmHHyS)G_p{Z^Qh}v53XtD6%C3Deh zCg)x_RR7Y>&}C{3?^$2F-j2sn$KK8gHON}yRGIBGDoI~CoYT0d6C$)GL4YRc@=Em? z_F2RCXtU*HE{p9=U|$5QWz6$R=8Qg!(tV9@6aWAK2mojZ zVN@6sA|A~E0049W000aC003}dV{2h&WiD!SZ*FalyKVw85Jmg_ik0ilXiZ2E)HD=y z)RBxm(i-qXwwH$@{yp}1S5Ty!bLT#Oo3>?E7-XB4-M(2@?kk3jRvPSOJU*Cd74?Z0KyeDY)m@Gmko&*l$MO9KQH0000804i-_n8t;{dK%v?Cm?3)+HuI83in5BO{Vb93F{#E6! z9eUw(?azNbJz1GEEOWE0-15(-e?!mE>KUFcyM11|RW)5gpCMv;?dd6Ls@k*z_kIn2 z2B%AD=D5i`@V}?upCRmD|8m^iO&vG2L-*(5e;)mV!C%In25L8d8|(XQ-zLjV`)2y{ z&FL=if2uHbreU)(XeuDAfaxLh8JypIdYZ4tO?_X5{|?jI^~zoVB$HZ-RXx zUC-N=-+2BR#Nng#*I)m+Pwu9Em`-9o{r9ZGpHF}M*I)P_FSjN&|9q;;#(h;`Ow7_A z%^MKZb-t{_#4Uko*`DEt)VOeK_+pK$D&V2ZMIOg%t02~F?{tRo3T{pBs!O)P>K9h* zLsK@c%;vy!P7J{-WAHI>;bm71j%dFw3x&c9p%E17AvNA_)yp-{Ethq+w6ipI?fSm| z&&UUAo0e6&?OjjkAw8$@Rsa`DKrnK_70;bbYOU*$*hDAwP+mds1dQ!TNw8ep-eSCO zcI7U;q<~hdg5U`?mi?Cg6AzjUvH$YpVgsRXXT&s5O4R!Gvn%2|FjC1 zW*qt{fXsgP&=PQ>*LCYH7TTj2<$&&9(Q7|M1-0d+%xFAE(l-vYQW&PUw4-n-+I&>@ z08bbu3RLtdk-)`HE}D!YtewpXcJFq0_t#&aD_PZLnEJ~ubn4&*L_V~%S((!H-5$Um zR;Fn7(j``v^X>>A*_Cp>WTe(rSG3B^H1IS0C@2YuGSG2tGh~H`V3#|gJPz_|1Po)( z$GqMmL?MdSDtGoVe`XHbufT!)<3FFtUe!bFRsi~pJcw+gwO*CHOGib8E;!9j7@ zvcmP)`}K_!&T?-coY8HNEiTl(bulD5O_dNj-ueZ%$pYsTZ*v%iJB>PWfotp~h4CK} z{^w1yvp6efJZRmre#P+*H60SOwgUip82L^p;+{N_;+p*CH|%+^OB*frtJ_E#VI!Wy z$Yj*+La1yFUV)u(AX?Bg$?{46M+CxiFK(C=wKFSqK-l~wt9JE zh&c-$^wolPFQ_F`<^`nEz6R?a=F42p^-eNR9T#&7vk$Ik?9_b>zgC!<<*;=7X(?tB zQvvWy5FU~<+Sv6T;55lHvi)$&T-FLMxfl!UVkg+$Wq;UbJ_<7!yE&aZNmZPPW}PsI zB5)I@fh!SKY^k`zil!$}p+aVvbfA9Oao=zt;DrJ`B)vjWo!I*sec*T1syS2VEj#$$ zks8c2G_xkfIWpN^SGi2>kE_MOwGq@jFETFL1nOWn78GS8<1t+i=@8e5*IrY${}4vL zGHPq6=jZP}`Q4uj%zjkY~lFx>iebKnIHP``kmvrWto-Le1m*- zhNq`+hKOYx*6tjb&}aDDuvxnF!ZfS`*LiWDZ(dbQBTQ306R*Ed+-y0o`}`F88Va7C zW;vJPeKPzRB0qGBte<=idl-0D{?(Tbmwo}ICo(w^^tc_&GbIN;u|ZPE*#g^?DfOgT z#rVG6<-%Ej2{Hgp#ac*F79JFRw+IcSVN1KXfkk;;$0 zY@3xkuhNfIvja1}&C&ABmd4?7UV}SVfS;j%2(Pbe>bX@tZxsxFA82}Xx;SlO>b@Aw zw@JIw%$KvEe?Af4aq({+Q<}Cr`Fw8Pef|Xk9}CtY-JICX)-Tx$!NM)W0a%}pATcWJ z8U)q6@rxk2)>^`gI0lgk-N<|?k36Dpl(7vG+~-DU@KkGE<5xAdnFG~U zNkJRNwnOm|hw)g8RuMEXCmlgpj9tWQDL42NbR**hL9!-D{bop?^2>NxnyK%;Z0Cm> z&dBi#!5k1gLLEl6#}#Cd_o5|I8nMFglC(>BAx0!cV@^$W$_ZIZROVhVQpnhWK9eVM z+}(tWQb(#1;@&9YTQFZc_SItiN0ILx9N2SGYFe>7vBsjA3>v^^Q+`MdF+yx=ccKf? zxDfJ)qvv#hcUQ^~;!siw&vH+tPf1XBpu*sq(C4%?*Y&XsN-vo=p+dJXj8`5_e1MpV@{Lj0vO9p%! zTx0r5G$IolXT|C>_)KqDGV7SzYK8kZtIR8ZSC{)EkL-zP*T*Z)CZw*5(6AL5jM5EV z=3RT^Y>A-QMO*4IfPN?YjI{vzuoGm5)C#tP%w6&+6CBBK%_jq6qNx?3oG1-VU<2K- zx?KrC*G_iFi7So5aq`rV@=YWb;EuqRqb#~Zx1w_i#Gw#PsQ*=9c}YIzjr$QoswU5~ zvaXhQZa-rH{2`>^>-TFg z)FjNcU=0GB?fy(t3MsA!!_lZgv&jA;jL0sER6knXj(TON1%uzdBtR1b0iVBKhT#?E z-_oEL1fQ?H@u@hoX3{s&quHr`JRDZbS5Etq8^CXzXSz4PH?J`Gj69G`Og`&4VVTcY z@z<+aKCh@5Z$3in%55i!su%L~p^JsfF!eIv?zazZ6ILGxrY;RoScu0hUk7y|MySWZ zd)FdK8l@@Y)WFzrqn-WB9;A?cg`W6bQKsPj4Cx>rK!8DZ#&|vT#kst=Yb&EaDaL$f zC-*GiF-9<;cE;O7>?^dRg=rLS){RV_Xd1ST(XdlHCOKIvft3Nt6wWwv7B9AX1u9&N zcKils1cfnO>B`bqa3|~(Eb{p7)cta8?>zuNm~BBz&>1eGLiMU=0Bsr59HBOX#9_Ez zeZfhRFbVCyq5VgZ`CUSO-}A@TRF)a~R7FJC0KJ7}hpSy}StZZ6LRv)t28)_1A1rh{ zVOe_Vv@J4fNup+gEqXh8LCc%mI{;^lL_OX|NQ0$KCO&+{dhbl}A1e##6dztv4D?fF z=V$JO5`9QhM;sOi)#!)`cYaP| zpzA4Q!(`VCE6{CEIM_Ay%5Ti5@uBnD zk&)`NDZJ3H>a28sp#o;|hrIM}*fm%S0}Eq8M0UFxUTiQ}>7b1)b7QgYjyZfaSIIWH zl7~~<)@_oSq|$5hYR?GuoBmFc-ltMRWwFPNeb*O>VG}S>%e>FFYHuy1z=ocnd^mR;8(Q zysYW)xte(^Y&1k(#XazDCAJ6 zMbZJtI=o)*FwI$Pn_?#f0d(xeL>t9;cP>LN7R~G?wt=bCzqv}~kk{Fq^Ep}a>OsFi z7g{KfxeYR`N+3Q3ZMcWJ@{%9j;mqwQ16Ek!sxoGt5CBQ7(&H%`S}jN91HhcNMT*^+ zF&%XOY6z8FU$2~QH9PV*igNb?6>zUlJ(hIS1QVCe-rT1ri#jbJCabS)VN@34+A-FJ z_}ZI(_UhRdvM$H%w#t1lx{Rr;9yU<|Fa+iJ+qLFWCyf{E!>(faFY5})yX@(2oA4t3 zMB$!^hs3A1(RjU5A*u#mD7E2OZY8%>)eBpvbfJ4L(L+?=GnK85xM3YFFFVS|Q{$`B zu&x8#BMnB@&dQ*(+YLbI4O&AN>7T{_xZ&rxc9z^*z&{8P@=!(xE&YS)@R7rbOpEV1 zdUFlSn%MgV0`Q;P0Q$%Oo+~-7o4?ed9boR3J!bAlk?lFrJY5|&-pe&Dc^ghMYOezt zk0%$U7UAeh=Gf6rfOgkO@?~4&;;G=adX>NzhA#zTQtN2-Mip^&4uzBiZm2c2vFBP;rMf%_`#kxv`k1yLC@XZflsMo?ZJK{H(;ar zwR!s;Y@17#Wi~t*zMy4{1{ay`8E22t>x5Ydm>jOJ`=Y&49|Qk4@&aHF7ceBAERb>I zVq{R9i>NduF&Pc$$gwL$m-cGR9B3B3?cq#nkH(FVE$PzM8-6mL0`a<=wxa2_Wzi!A zQraT(x7C`5rQal9Q-+#Z(NDniWAmCkc6+x(=F=AsEg|8v4twZCkZf7N!XwY7Gtx$> zqsV<|9`4M|%Bp_2FQ!X)QEWbfe4k&pZRg`dG(f@*>1#JDMjS;oIs@dBpOz4?+trKEM#8;1N+i=D6ShI9 zVs@!^PIe6bNun_A$+THb89$sxmMQ=aJAwx3+i-+3y2F!XUB%W3y8TXBbh3+O=DijT zCn3-W$=;&rpfKfF?IdNU*07^ITpSn*ZGK^=H98R}tkf3*4Rw)tR#dTCs4lS;TY?G% zqE%Kska0tBJYgppVi$QJQEY>K8HT2m>W=B?hvw>5wwb$2KQrg-_tE1gB+zhywS!=~ ziUxSk=)`7~v(~g0nyCO{E+B)Q4lNU_PRC;@zPsW&?!w&3O}utzxM#jFRuq8j3eMpD zL%I&A4tUHXKM+2slNUQc9BSKO6;*>Poqfrh;a)#ApC84qHic*FC1=t zh^2F1`&}{S0ffL-rQ$` zl@9KAAbQ_Wcw?C_H@+p$vo*bM^?G4y#=(?J#INdpAH#Ino{e?_E3SdsBG|-2JdL9jAN=fW)WG z=hS!KY~i!TJsA{ z<=$5Tdj`Mgd_O%+eiT>B`>MWQ$<{1~x6Al9$NbUs1Bl0uQHj}VyKwk(Lc>SfLf4ko zriXp6o+3I~$a3zY{-)WLA|NcFS#eYRRaoMYdDQptS<&*} zDhQ@BUuhu?3f@7usL%RNzx*s_6ue$Cp`q9T`*ra** z4Vpg8YrU-O%+hh^6zkDrK2{^|Krdg{GOMVxNGUEJY+#J6na0{?^3g&Kfx?BJ*I1#0 zebMgNY}F0s1or$WQrNiasnroW2+<7?YMfVB<~8ent2T1Stb3*J5mI)#4mB*n7eh~R zA1eBVs0?DT*4O55h0AZv9pK*Ed1&eSu;3*b?J1X4oAs*ElZCgHZBFzLYd#d$r-ge7 z2bG8_U!x1ix@m)7gJ4D}S+^z_r_M#zG*AAaCL#E=GOfjC^La7m-xKUldGpi%{Lj8@X3TBDvv8PENR`GCyBHB>Ul;EjUG zAsu;j1f`pmkffd|j;hl*ge<3;v$|~sF)9p;Q{o=mNDHx4Z$sxhpu^Qfwx!#HTN?_S zvGxh6Hct54X9L1C{JbFGXEm_;r)t@cz9Ql3d3|Yi*S-s*3Uswai)8rX!a`i39Y|*{ zGOjIoYH~~MZbfORV|TzN=tGis;^I^XeV-dcI05_Mld_sH)o$@6NBFYw@yFl4Df#2h z(a`Vl?2iw>*!bf;1O4d?(aaWqw4y#JhR#m$Bfx&IsoW?3PU+vC+CjfKf%BHveO~LF zym4vI=h)&|(ia85w`9q5<{RHns?BbHUQ6w5 z<(_q6Cto3YyW5P{;HYOjv6mP(N#jym$P!0i{vf^C+k zTWp^LLKb!TK+r8r$fw!~uEDvQ90_P#42TY6p z@Tvi}zNCz{u8{U;rupNn^n>M?S;9kpTPX=4B-}z~gEYcLPTz2lgL_=IrRr_Hl8>g! z%droT9lDAdN~x=I?dRYoM@6T1G)v~(Lr~M_HVXl{p#l;0f4`Iba|Izx19uYnwbzCI zeuA5Y(_Hoa!^XF`_BW3F<7D|u^YyW^WsC5a)S&D(9lD!(W{fQ1D7%hbLcUyF*AZm| z>bjWF;vu_;s1&ZuvQ^wvko44rR9o%>`UtVzk%J+NDV#haf%2<(`;SGXxsXtPuOz^q zCF-G{W~IBdhNa_rW)s)q*?O}#E|PdENo(KAe%a{4zxQSfl*;TD8gRo=2J3j33- z5+)2?tbsqD7ui=kGx^@?V;Npe`Q8kF%&=}iyE88+aE(nw9|xXpRY|;DU5;%F@ldD5 z+G$3W&Bt6aMyk3U_`rY<3npEM3cnh6O2%znKEE7#6Lqex!AXVNy+@EY#*l`;@D<}; z1BS-e;AYgZke8LvpoUE?Ig7Nf&uQcyYtXa>r(2P?!?A1|SsT_QSXVM5GQ`mCG~bK^ z1DAyhoiOa}d{`fP_mhu&X2~8uK|q|+Et&}k-5OgMp*8`9b+UP7q%#-FhO#D<3w+m&!xcUXa?lfgMbVk zH~OzF%eyq-@Y@{jfDkLv~RPon-p^fq`#zPc5jZw6;*cA-~W`;ZLr>Zwl@lb*AA+2FxnN zyFSin_(k%6nGU{Y>vsnJSi7lrW5pa;7QqdlAq+i;Ln7A^G!QHyCdH`54q9^CZ_r@v zY>+x2RqwWHuV!`R7s*8zjbMB84X+Q5N?LYuiB97w{{My;{IG`?S^#~lXP8bjDvn)e z`BH(1hdUp7Y`em4SBS_ShD=kr(L|)D>Vpu?yyj z9muA9YI&QnO&Ol4iw(19GP3&}oOokc0P-+gY#r36*4ARMcT{r78q(#xnr?C>EU{Sb z3lB9nK5x3Py^Xxhx{?tm&!toBGu~(_dG^;Qv&>b2SAYS)hYvhyk>XlF%qF*NaL95v zY22X|=@i{Sw~Q~Yi?$e|=kx-4%Wu$<56R7Usz)_Wp-+%pb|!zkYo1Z_y05J%Hkh z0IUut9;iY)7$rh%FT-wgJ?vC-@S7bSR8Z?fdj&XpGG8{g>{N#&WU zJCxh?EkW&@B=TAi6amL`&{>58K3YIw=yQRu7zyU9Nhx2}Lbf~mrh0|?-)=d){K=r@ ztnyrj#Xi>cT?zHUocZ29f{zgn)t61GZMR}bYKBuSluU|hiAEehyB(a(4o=hrs(UoS zK;g`;MMGJ4lEe-Js6j9V?$sR{+MXe?i~ckOr1lGif-jVK9A)c5xReS(X8e@NAp+kY zP=-HBm6Ub5M@EM%V^==WpUhTP2@scY>n82-%@tN%LTYZNQ8jUIB48&G)(y-P^b)ek zubt)r#uMzp{_d+RnQpq-U3>4UA{%biBpL?VnBln$Kmm%PQ<2+tJUJ;4wy?P^TW#7V zKq&PW<+7bFG!3T+=O$PJGwg9YW9=#7z5er!k>!r7(*F9kOyotI@`30Oqg<#WkR(sZ zM)E*ndn0xM#vxUF3!&^rUcFnlL#8LDC(VVj5MrGKEC-|vAQ6mGBZ7MuzURz#o8mxi zP0A4r`OoHFeOQiR_u5n7m-&T3>ORhzZe{$3za;a{?xwaB#|#9LTf8|Zrdb{f3yMF} z6#tDfw7LS;Z`#&6qn9gd)tp9(kXM{2Fh33m``;UvdeDznbC)fn%;Cy0S%~!Kdz77SA5iSOdmUS$sbG=HO%jqfs2R?FL zgdAF|F-~?qX*nkrSd;6=MdofGd%f(8JWW|)Mmf@yiTJ-ykN#m&1wMOJt(pMgs|1al zCw|}4wjC%61^_ZZwplwuT|3X#D5932CZOTdrRDgV3OIa{AJWr!K5BZ0TsU1H4gZiQkHtG5>)AvP=>Hxc;fWF>nB$WzgD?Gx@Ba6EiS}m?G|v1XaXndovU2S84{a)o6iZ8?7>1b3b;Bp8ips9 z+f6ciQtC6CmQ~Or|IaFw4GE z&I)d8+UDk!Hmu}mCv*-Sjf~2p!o);%mP_$)^5b3%U8%pSpsDPv zhVMIEN$e!CVDx zdryG2trFK8snhdDxeAq`fLHs}Q@7ur zhrd0>KRf^*qNa8C5Ma%|W)Q0AK7?TpKkN_ zIZ&@b`fm&JHo@)paPZ=y@sy_FU(ui0oewqOw~u~n{Qb=J_#XUzHnM1**d5{5E-b&X zf2m)99{!d53cum}f&bKv9bW$T59;TABu{P2=UO)Y@^KT~6U#4E{nEO{zrugSl2zS& z>t3#jAzlC_qfyVAJs5t4T1k|a6nfbc0QQmc`?E9Yx2XHaLB00o_&~**2%R36dh~qV zroC`(XanKRg$mld;ZuyUj2p_kZORhiJy=2aU$DmQYMYbE5L;q@@U;AbsFeqnJM4U^ zv#mb)lk~|%@h4jz@Zrj{u25k*TTU0WK<=Vb!^ac=@8x|=qYQClA=f@yTz)?xxoK1| zqi~kVBwQ)Rl?d82pc?z0F=3KCk5BUMaEPbl)`m78&l6t}lON32HQQsavNvbXPca3< zN3=BRb1}CmqPgb#%-i>pp%-D=Z@cA3uzC_BJ=9XG%1pc7ZP4>sFne9;IlAJu1c{@z zOSA6)h9`HmW_iu&{`qdbW_dj_m38~ICsBJ=9PHLy;V^J6&TULu&LxIX^WkwaUFZNY z!FBJ%+HoUh^xg|S0TA=};P`X`Fc7XD1W7p+n49r1Q_7v?6dyNHd0oB%AJv;xqt8(< zD3J=mulX|jnQ^!=_)O)IH5bPq?me}G_}uX)p_dxZC444pw^#U3_}k>bj0|%t44boblslr3d%(_TPW#?{+;;gOBgHty{jh!$W(LKPiH+SK^TGUwE+W@ux*w znSj4=^B;Zxb!YoFT|#B%PN3*4GG0PAT8-=pGq#LK7)yMEcTE9JZB`^ZmggB2=BwVc zSP6Q9#x)N|euhTEQrRgjUlgo5D-zIZ|9wVf__G%0!RsJbJUA%AFyV%Y%#^YS$k6ab zCwQ;WSC)=n8;3I{(OC>csvDE`p-fA6=-?{)OGY4lH57dtd;Yj8cMla-pz7?Q0ro=^t;W_xE~Pi7H}qS`ex4C^vuRa2tS03Y2{Ro*ae`M2O^gLVET^Uy`=trxZi;SdcNhc)gFoAfc%?mlyH(%z z;6qusYI^(R$i-$k$jzch^M;0oQX-i}Dq`Ipi0eK&s11joNkhO!WLZH~LfEOMp>L!%;Y z^*|>>iC9Ou*>26c3LynLhhkbnhVjWAchMaPY-8W|^Tce0 zs(g%5^~%QO`K<@gYZ=RHjrL1L?U{c3NLar)AvX^I`sI!q$`?1qKg&m7{24)Xb-_1L z42YuZiqeCj4ZLL3a0ewf5Nl+8dn4LP_oJvknkYu&+;9q7qXbAV5fNG(_e#&~ShjL2 ze5Vfd6+P9or5DHB>gvRw?$`>)`aeKe5L^A&6LD^M*gZQuiwtIPh%-taNi16?^T#2w znRXo685X?qpytE1pRzMN%a(qDfWR%X{YCfcSSA%Hyk3mLOI=o5j?25r#b4Y6JO6pj zsrRP(1gqC~!710j*!F1;ZE|fS^o^3S=%~1R+sRM#RAZ9DdCcLW-B+(V%1m=;1GC!` z1}2}NgSxN5vo(tNl?82F;=q$;Mo^f4wr}_T{C+s`uC^D+FMdqku9?6&+c9=k&P9uc zr=>dd-#PZ*Rx15Gq*tnW5MRBkx;uoaA@bk{WqI)U`>^C$GsKScc+0SI+@RSO=76U0 z^qPc#OX%+Ae8P7DC95*P?+7oeF8823sKeGSo8dB+Tl+0;^=m#ph^%fXT$~y`P>8W3 z^>j%g7G^cI&ZHZeH(^s5+MeDoswW6BY}>dd5zy1<0D!85~NY|=y|N9G}zF72DhRwEDYsiOWp|leltpoGAXrpJ%UsKoV0us zP%!ARS*!|OuvW? zYjcs}_Cm18JN_@l_g_c5-pkrU=@a9gjL0GurgIyUq8mIqggJ|ppgdK(+E=V@&^QAI z$M6^jw?XwQ<%nWOVmr-eDigqBW?j5v>Ro6~11<=s>0_fM@1tE;XIJZx7cU7V95Cjj zfG&NC2!}_`9y_|7kR+D_0L+v(x;_GHSj4grc6hL|`*WKkZ1DmEQ;yo=8bxKcs-hkLndg1*3|nMmK;n ze}q`?c-@N9;mBzJ%SwNAz230x_|=EzxBK;4nD;>bE48Y)w6n=`*HHK&EpRV!MvTa) zObNaE(Bk5;yd2Tk;saiwX0B1swt4L3u26Q{F0bb!8_FqYJNs$S#|vi5)8!~O(_1Iq zlciB{NBQZq3SnLPe2<@q!vY0hs9SKT4QRAOmX=@ung;jS9*XEjZ;ob-QewYI26Hwz zU(jK_O9@1Bd>9#}4vsxEE68-xl6Y!19{+}%^JQy-@Twv<{Dn(qx?=+593dAr(ojEY z9fi@cC#RB6q_?l%=kh@6>r&k5uxPs0WFpk>8v~y;(}6^Y6yOtbKSP#D((MTyOJ$MnKb$;wdZt$Ou`amloB%_x=Ai=W))LmOs!D=5t$Cwi#^WdJ}MykfB_cCp6M)+5(@t9Ctu<_9}a_aj|ce zTs6iPp`tHiMY&Y>PQjnK=d=!G{nzA9NLEko+jvKczJdiO`3xq!w?y0w-+?d+@DX*mq#Y%N_3MafRFi`Y?tcCxt9vMu&XL4(nLWPX8l zT_m0ci(3#KgfM)tYBQ>v{{A)AcuoHHHl{T|scX6qQz7;*%-zAR50lm%X>1}9j<-n< zh*P_v`+B3-#qKb5ThnYJ2-X-1T@__rl_U#}v2L)>?RlYS`*x*gTA!u+TjP_=8S%&S zid_#CEw}Sx{aDTMQK=TDBJZ0dxUQQe10jC@aWKi2dW84?> zbC7}(m{Ea(xJP2F?1Zq|Bw{EbBadt70`uobV)M%X4$)PtE96N}a`~1<7jtY)@LfSb zd79x)`EBRZajNv@OvS0EZ#^*KE%H%~Rf9K==!5|OSZ>&K76Xh`vFn9-DM`6`XI5Na zeXLh&Iz6FoL+3tvch&|ur-Z=f>bdw+aP=6W$uxPW7x3mK&tK7m_Mbi|`EYHcTQaAN zn*|~vGY<{HfqTgzEC$7`afW2!ZEu=K%=vg%}FXR1@~hy0gT zL?wHT*T8ng|L`;Fd2VT?J0e*vh={(1WA!bo>%uSZ8T&Lw-;ZiD47X+i^T|(8%}y4gSJ&|5`^T_gH#?IwOXYWB;wJ&|3a2fV4cPqLc(^rjD zOaL>RB$pSWag!es;qZTb1Y?v58oBWsOI z+=Qe7v0Gh_N}Pv!Zd9qPdhqE;US*)%79D_MXHd?@O{WYB(NZW)#w7BO{9kTsp_&ZS zXwcVSyGwbs}ctvH`w> zW9U|QgAc3k@~1o&sqtCQ%)BbagJIsPZ~lAJ`g$@RQPw7U^>9RX?R0gq%s5YuIApQ! z;vI7IS%=c=${m&jf^BNNs)=Jx!`bPP@~|y#|EpiZN%|>Xh|ua=~6@E_>^n&0f+9{g`|mR|&|O zkpS82Ymja;30=@|aJLlqpkySZVlo=;5xP-2JdJi<&epAvo|y4vlos)L)Mby7Wvm(Y zYft@02!*6Yev+n3-ayiDF5_Drp02RlgA00QDRRcZ>e&xs9VSXDC(jey^4X`}3YRxv zx9cS)Ip~%x$0l>4KhM3lL2=p1NY9CRYRQdyDpPVf=WDy_KsQfr=i*k$!?NB}27SW$ zz%|)evWp@2=V1K#l4;WSA;PN0sj3kIUEzl?{LyDMiZi|+8?+5IN5f1H#nAf2_|VWp zSm)R1jC>oGc<+i=_A8T3CTI0Nw2`N2i{oins@v3BoQPCw`A4E3>lqNtZdBdR`q%;A zJaXzeE4XJSkv_piU-8QE80U+o1=Kx5Pb_nz*@cib=`p<1!|7pi=I#L>OBJHRU7gV6 zoeV7LBA*|ZI0-;$B@{m7*Sffjr$VSu;k z_lpX2Lo27=cFr6)qsE{R3_e1*3>!KjDXfA5w#IDB&>CiyF2#Ab45}@PxAch7&hwup5r{ zzU*R;mI8E0dsqyqULXM2ojNK`zOM(VsNKV%{VhWr&T+ty>TU1p;R5%z-`zq(zLMy5 zfW0%HdeyQ6K6_e#0@>N7nPdr+Knp1pAQ1O&Hn9b>U2FuP;OOpk`FEN&X(PhkI^Hn= zyns1_^BGWIct!~C6^j5G361T%1_8tffEed4v1CfpMt+3${#B_N+!#%4>#6)trFNtT z?OvrXU^whsLX4g((102Z2*j~VX^o0h$rbM8_E#aZ2qxzaKxn77a>{jMfHmnAfC0AP zRL2FGPe4okfG3!1mrx2FsSw&8?u9`9Rf_S6U@uW>r|ujbsnq_M^POjecvOvmH}KCj z@IjM=o|7IE&1@-(cuY0cKZo~eV})t&@b*VhlL|!~+!IVqiq~gcGJOHycj~-x?K$F_ zw2%GC)TH>A0RB%-H7Oha{^&4~wNoGILbUg?_s2hzvR|-(K!3uZN!c)iRD0qW9?qrz zxV<*&d=_qd_PyT$PRbTB{No2FCHE{Br4dhdr>?HxY4(!$yIV=g_l$RYT}kPx{Fy$) z8SK=i)&feGJ^S8oA|<7#o9wlelJch(Tx5v5P13}@CF%^f{9GI9QG$U>2Vw%=Pk`q( IB#OBD9}jdHE&u=k literal 0 HcmV?d00001