diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/clouwatch.png b/content/posts/2022-12-30-micro-hack-eventbridge/clouwatch.png new file mode 100644 index 00000000..dbe0fb40 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/clouwatch.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/cover.jpeg b/content/posts/2022-12-30-micro-hack-eventbridge/cover.jpeg new file mode 100644 index 00000000..baa579a8 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/cover.jpeg differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/diagrams.excalidraw b/content/posts/2022-12-30-micro-hack-eventbridge/diagrams.excalidraw new file mode 100644 index 00000000..e4d120ba --- /dev/null +++ b/content/posts/2022-12-30-micro-hack-eventbridge/diagrams.excalidraw @@ -0,0 +1,7988 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 329, + "versionNonce": 871270334, + "isDeleted": false, + "id": "IPpfIBABYhUJUtScF-0ga", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 141.4133814157699, + "y": -1257.6152985663539, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 701004489, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 788, + "versionNonce": 770530082, + "isDeleted": false, + "id": "6b742ztEi0BUlQsUvc5zQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 149.85082113183944, + "y": -1174.3767403724032, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895, + "height": 134, + "seed": 287846983, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Linux x64 medium", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Linux x64 medium" + }, + { + "type": "rectangle", + "version": 2059, + "versionNonce": 1988288510, + "isDeleted": false, + "id": "tAGL79lVuWWIkVOCLoYLB", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 237.74397114177464, + "y": -926.9267675660813, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 442513833, + "groupIds": [ + "wo_1DkibaJz8i-SB5piiJ", + "AlQPFKoSUgusVYZzUlzju", + "uI_R8uWSYjlrN37qIMnxu" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1219, + "versionNonce": 1335469794, + "isDeleted": false, + "id": "r0RF44U5rq5QiSQigsIWB", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 289.8342973839767, + "y": -871.1966347654125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1712869735, + "groupIds": [ + "RapTZuAbX7p3YfAX7Kt11", + "AlQPFKoSUgusVYZzUlzju", + "uI_R8uWSYjlrN37qIMnxu" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1219, + "versionNonce": 1298280510, + "isDeleted": false, + "id": "1AtzTNxuy1n-JXiAzwdya", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 340.87309737972555, + "y": -838.0617846545974, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1667046537, + "groupIds": [ + "RapTZuAbX7p3YfAX7Kt11", + "AlQPFKoSUgusVYZzUlzju", + "uI_R8uWSYjlrN37qIMnxu" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2099, + "versionNonce": 1430682274, + "isDeleted": false, + "id": "rQieHFWuRFBItfDqbQr4U", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 411.90095440374716, + "y": -925.9421288826343, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1643613319, + "groupIds": [ + "R1No_Hd5ab2U_mQlLc7JN", + "gBr7FAUqVDcYy-GLTVLVi", + "wTHD7yFfjPvAu1WzY28yx" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1258, + "versionNonce": 1684895870, + "isDeleted": false, + "id": "RFZx5dTFheoyoFgvbJK0p", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 463.9912806459488, + "y": -870.2119960819655, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 75146089, + "groupIds": [ + "_g9LT73fv8cBlJcMMdHmt", + "gBr7FAUqVDcYy-GLTVLVi", + "wTHD7yFfjPvAu1WzY28yx" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1258, + "versionNonce": 2107823714, + "isDeleted": false, + "id": "A3UG8nQ2pQjZp3-65HaB0", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 515.0300806416981, + "y": -837.0771459711505, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 276980647, + "groupIds": [ + "_g9LT73fv8cBlJcMMdHmt", + "gBr7FAUqVDcYy-GLTVLVi", + "wTHD7yFfjPvAu1WzY28yx" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2156, + "versionNonce": 1130739902, + "isDeleted": false, + "id": "VP2RCa9RDJOLXovhrUyg6", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 588.5499200440868, + "y": -923.393729815838, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 2047102537, + "groupIds": [ + "JL7_A0aK7yGqtS3Sf5OhA", + "btlj8uO_T0owMuGOz1ITv", + "e1tmJMLCYgaDRqXyVOtPR" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1315, + "versionNonce": 1501411874, + "isDeleted": false, + "id": "m3EdWJci71ToD9KyR5APd", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 640.6402462862889, + "y": -867.6635970151692, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1373984455, + "groupIds": [ + "ChRTlEspI5Odbi5N4je5C", + "btlj8uO_T0owMuGOz1ITv", + "e1tmJMLCYgaDRqXyVOtPR" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1315, + "versionNonce": 1374417150, + "isDeleted": false, + "id": "Gd24Rxo2x4JNdAAasHiCn", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 691.6790462820377, + "y": -834.5287469043542, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 718642473, + "groupIds": [ + "ChRTlEspI5Odbi5N4je5C", + "btlj8uO_T0owMuGOz1ITv", + "e1tmJMLCYgaDRqXyVOtPR" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 581, + "versionNonce": 130426338, + "isDeleted": false, + "id": "k3pkzPgILnHy_uw_rd1cJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -1756.714878147979, + "y": -576.2640200377282, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 1287448039, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 945, + "versionNonce": 1535189310, + "isDeleted": false, + "id": "lXUtM1KStnbTa3DOJc45x", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -1520.4370645292647, + "y": -476.4579665911115, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 414, + "height": 134, + "seed": 375001097, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Webhook", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Webhook" + }, + { + "type": "rectangle", + "version": 2419, + "versionNonce": 1904941474, + "isDeleted": false, + "id": "q-UM8-XOM3w1oYhCz6VYP", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1292.2983608951636, + "y": -244.73190428311318, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 538284295, + "groupIds": [ + "cnUtjiAEn4hJtGQ-PcpDp", + "fHBqM4osHWRXa71OJKPLD", + "Egl20ZGGulZfXBm0Du-PD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1578, + "versionNonce": 327567742, + "isDeleted": false, + "id": "QMl-zi5b3LVFkbg0EnTZo", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1240.208034652962, + "y": -189.00177148244074, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1116546793, + "groupIds": [ + "DILng78xsg0YqK0-FQC52", + "fHBqM4osHWRXa71OJKPLD", + "Egl20ZGGulZfXBm0Du-PD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1578, + "versionNonce": 100373858, + "isDeleted": false, + "id": "QZT8-szRARzYwDC-c3gJl", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1189.169234657213, + "y": -155.86692137162936, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1433131047, + "groupIds": [ + "DILng78xsg0YqK0-FQC52", + "fHBqM4osHWRXa71OJKPLD", + "Egl20ZGGulZfXBm0Du-PD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 1911, + "versionNonce": 423389630, + "isDeleted": false, + "id": "Yt5D8orWFC9k8ivWppde1", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 448.76087140067875, + "y": 1166.1085882178886, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.36432904268622, + "height": 129.36432904268622, + "seed": 1778016713, + "groupIds": [ + "WF_i6LtU6HXtnUnE2Usd-", + "yy27C8CjiX2hEatoixA2k", + "y7g0IMhKHHVPGCA0NGy3O", + "XKBYD3e8VyEH2RgZ7Za3a" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1693, + "versionNonce": 1986435362, + "isDeleted": false, + "id": "LLZF70HoSRYysbiqfHA8M", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 475.8198006893931, + "y": 1188.1071891636566, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 77.73215126592353, + "height": 21.37623582977287, + "seed": 313277255, + "groupIds": [ + "y7g0IMhKHHVPGCA0NGy3O", + "XKBYD3e8VyEH2RgZ7Za3a" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2311, + "versionNonce": 2076475902, + "isDeleted": false, + "id": "N1jGAPWDLEkGBCMlTvOqs", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 476.5312484255669, + "y": 1199.792103840602, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 76.12235688675663, + "height": 80.4772115391467, + "seed": 1774010537, + "groupIds": [ + "y7g0IMhKHHVPGCA0NGy3O", + "XKBYD3e8VyEH2RgZ7Za3a" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.643443575380352, + 63.89985898598831 + ], + [ + 13.453701915436246, + 75.51223305810007 + ], + [ + 40.448046712817515, + 80.4772115391467 + ], + [ + 64.67589821287176, + 76.3302900087603 + ], + [ + 70.30043105269498, + 63.496974874436326 + ], + [ + 76.12235688675663, + 0.19414715004206573 + ] + ] + }, + { + "type": "ellipse", + "version": 1703, + "versionNonce": 1916478690, + "isDeleted": false, + "id": "ANCjpU8VdHytso_5NhQwr", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 509.86635950597565, + "y": 1220.191368797805, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 9.338801443761762, + "height": 9.338801443761762, + "seed": 204683879, + "groupIds": [ + "y7g0IMhKHHVPGCA0NGy3O", + "XKBYD3e8VyEH2RgZ7Za3a" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2389, + "versionNonce": 1042256446, + "isDeleted": false, + "id": "KZkgzRyyR4OW_s9Is7PPp", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 514.8160880565779, + "y": 1225.3058260412326, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 46.20902042086896, + "height": 22.920997757510293, + "seed": 1870742409, + "groupIds": [ + "y7g0IMhKHHVPGCA0NGy3O", + "XKBYD3e8VyEH2RgZ7Za3a" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.959818742248306, + 14.779540455724831 + ], + [ + 33.80153553185966, + 22.920997757510293 + ], + [ + 45.56652058734014, + 20.16340346746921 + ], + [ + 46.20902042086896, + 11.709055370965237 + ], + [ + 35.705183023821554, + 3.49073418279207 + ] + ] + }, + { + "type": "rectangle", + "version": 1543, + "versionNonce": 1661483170, + "isDeleted": false, + "id": "UHkXwPKXjFirFnFdgGYOx", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 775.296269359309, + "y": -923.9832009348938, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.05422466973346, + "height": 129.05422466973346, + "seed": 919426439, + "groupIds": [ + "zy9iJMFVSkDm0zGNQjgWV", + "0iO0_TXIGTAeNELMX50W7", + "NHzW9VwvTj5hWTkHuDO17", + "LTgmQ6H4-diYSORjjQGvt", + "W_693vYKRjOMv_Gv4ngY9", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1238, + "versionNonce": 1529780862, + "isDeleted": false, + "id": "-5bySe2iWYu3VIpdkGOjV", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 791.524314017302, + "y": -866.265149826253, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 1736567401, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1293, + "versionNonce": 679269474, + "isDeleted": false, + "id": "H8t_wb2nZIrTPsDZZWlNT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 872.9411827392601, + "y": -866.4107703943919, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 968297639, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1910, + "versionNonce": 1236441790, + "isDeleted": false, + "id": "fc7Cw-87Eo54EcTzSZWD-", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 825.1977933226526, + "y": -873.56331236193, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 713733449, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1984, + "versionNonce": 1416099874, + "isDeleted": false, + "id": "iU4BIoRfPkMBk_ODizVZU", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 1.5707963267948957, + "x": 838.2091301278565, + "y": -885.3167700769554, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 547151815, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2014, + "versionNonce": 5018366, + "isDeleted": false, + "id": "32IFSAKCpLL5pbQZzaTlR", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 849.9769542899162, + "y": -872.3900087408001, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 1811358761, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2101, + "versionNonce": 1723376610, + "isDeleted": false, + "id": "1OIwVzsJ7uvmvbPZz-G-k", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 4.71238898038469, + "x": 836.9836513159157, + "y": -860.5951961336868, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 1302023911, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1512, + "versionNonce": 2038268734, + "isDeleted": false, + "id": "p8UCIvuI8vd6XdThJRmag", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 811.641037047636, + "y": -858.1870213684379, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1739765513, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1528, + "versionNonce": 159242146, + "isDeleted": false, + "id": "lwAoXV-z_yNixYY0qgShq", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 856.4442628382662, + "y": -857.9433712879836, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 725539335, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1504, + "versionNonce": 933653374, + "isDeleted": false, + "id": "KBN8uOa9dZNK25IftG8ye", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 799.5026373233568, + "y": -866.1782567200171, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1345908201, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333959, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "line", + "version": 1608, + "versionNonce": 1290179426, + "isDeleted": false, + "id": "hSoyv20gzjU9-n0LZqWuE", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 798.9996389743746, + "y": -817.2231891814263, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 511967527, + "groupIds": [ + "JZc4BXmgv8wIor7bDjkM2", + "4-2KJKx65lvm77dvpeLNI", + "H1wgZfnoJsFb7XYTI5byD" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "rectangle", + "version": 1965, + "versionNonce": 1225280446, + "isDeleted": false, + "id": "S-fIke9i7FlE1zjc6WX3d", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1515.6950225570336, + "y": -243.89956552942567, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 132.513901776222, + "height": 132.513901776222, + "seed": 2090158281, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2438, + "versionNonce": 1665259298, + "isDeleted": false, + "id": "sGOMJUpcDVYe8G_y3tZZl", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1464.6670278476345, + "y": -202.7105051475064, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 31.09111817809873, + "height": 0, + "seed": 953631815, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 31.09111817809873, + 0 + ] + ] + }, + { + "type": "line", + "version": 2489, + "versionNonce": 1271145470, + "isDeleted": false, + "id": "mKdRZeJJwbcwe8DA74o40", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "dotted", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1467.683830058305, + "y": -151.92355594386208, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 35.12579937368071, + "height": 0, + "seed": 1449346985, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 35.12579937368071, + 0 + ] + ] + }, + { + "type": "line", + "version": 2335, + "versionNonce": 1560191714, + "isDeleted": false, + "id": "Q1PMtAIsNn6NJZlgKRldo", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1502.118322642862, + "y": -211.25871242044923, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 34.751149823428165, + "height": 99.22691944723918, + "seed": 706028391, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 34.751149823428165, + -15.168227067575241 + ], + [ + 34.580014950560496, + 84.05869237966394 + ], + [ + 0.16511798805179914, + 68.56115292101326 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 2283, + "versionNonce": 1910174782, + "isDeleted": false, + "id": "ZyZs21YLCKKO8jWB40sff", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1431.4867908955998, + "y": -226.80622054554806, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 34.79568563677207, + "height": 98.95300857572143, + "seed": 130968201, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.40382397143670984, + 98.95300857572143 + ], + [ + 34.76452822420393, + 83.9401882712694 + ], + [ + 34.79568563677207, + 15.388216872006797 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 2008, + "versionNonce": 1688991394, + "isDeleted": false, + "id": "weclFG3BViQF9TJQk4Kgh", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1458.7855467088202, + "y": -165.04005924454214, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 18.65370114257963, + "height": 25.013249586069424, + "seed": 1921654407, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 18.65370114257963, + -25.013249586069424 + ] + ] + }, + { + "type": "line", + "version": 2127, + "versionNonce": 86883454, + "isDeleted": false, + "id": "qEwwjWskZihw1jJSefFTl", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1442.7811763838217, + "y": -185.2671078558178, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 10.282190625874609, + "height": 17.24508457115247, + "seed": 1771188585, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 10.259752942543065, + 8.958129621990127 + ], + [ + -0.022437683331543258, + 17.24508457115247 + ] + ] + }, + { + "type": "line", + "version": 2267, + "versionNonce": 2063127138, + "isDeleted": false, + "id": "cCdAnTUl5K77lfW1VO2Q6", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": -1466.9784385975058, + "y": -186.38082916060193, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 10.282190625874609, + "height": 17.24508457115247, + "seed": 1425192359, + "groupIds": [ + "axS7AJNF-FqFCmNxFUHxL", + "a-xqUQwTTZjaEunczyVoB" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 10.259752942543065, + 8.958129621990127 + ], + [ + -0.022437683331543258, + 17.24508457115247 + ] + ] + }, + { + "type": "rectangle", + "version": 985, + "versionNonce": 1803386046, + "isDeleted": false, + "id": "tNpZdB5KzjmCT-nWtNhFV", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 177.179830624666, + "y": 824.6161242047365, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 821697609, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1426, + "versionNonce": 850671138, + "isDeleted": false, + "id": "3JPlTIP65oaKg4JUhPgDf", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 212.19989110199322, + "y": 924.3176979515592, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 834, + "height": 134, + "seed": 142305479, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Syncer linux-x64", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Syncer linux-x64" + }, + { + "type": "rectangle", + "version": 2824, + "versionNonce": 711668990, + "isDeleted": false, + "id": "XF1wwwTbs-tAOjBwcuG43", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 641.5963478774806, + "y": 1156.1482399593515, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1575070505, + "groupIds": [ + "kw29FBZ4F2I0WFOYc5ZNh", + "UFHT5IxKEpCEN1U4k9Ngm", + "nv-qdKuRrVebPKFNyJsEN" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1982, + "versionNonce": 1825382882, + "isDeleted": false, + "id": "s5d6NiqnVbdyrUHXgq0ax", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 693.6866741196823, + "y": 1211.878372760024, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 717273063, + "groupIds": [ + "F2gclM0pLLMPwg_lIbCvW", + "UFHT5IxKEpCEN1U4k9Ngm", + "nv-qdKuRrVebPKFNyJsEN" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1982, + "versionNonce": 1803019582, + "isDeleted": false, + "id": "pAIyM1XEMpoasGpAi5Xy-", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 744.7254741154316, + "y": 1245.0132228708353, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1756651017, + "groupIds": [ + "F2gclM0pLLMPwg_lIbCvW", + "UFHT5IxKEpCEN1U4k9Ngm", + "nv-qdKuRrVebPKFNyJsEN" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 3850, + "versionNonce": 340956578, + "isDeleted": false, + "id": "a3lnTV7MV9uUXIN19HOc5", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -2576.9438359952655, + "y": -309.16590566816194, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 228.7781163626976, + "height": 228.55903974739914, + "seed": 1909400327, + "groupIds": [ + "xuh3iImUyoWMJkibhPEnw", + "Y34D-0hXNmulm_fXmkw57", + "6gDOtwn2-UF1As1eW4vCS", + "oKGAIrGcTW0yQtLfXJuB7", + "pHDlBGS2M_IIRncM8BZBe" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1745, + "versionNonce": 298366, + "isDeleted": false, + "id": "DKUL-PjzwBwDuGkQuqLP5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -2554.622486969326, + "y": -286.71162613675006, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 184.13541831081753, + "height": 184.13541831081753, + "seed": 812496105, + "groupIds": [ + "sE680VmN111yE54t6cwgC", + "pHDlBGS2M_IIRncM8BZBe" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 5360, + "versionNonce": 1517523298, + "isDeleted": false, + "id": "WUmCZCTUUnQ9nVO2DWcJs", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -2498.7323324063213, + "y": -249.7725686408321, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 99.7386667792433, + "height": 115.1944641970004, + "seed": 505621031, + "groupIds": [ + "sE680VmN111yE54t6cwgC", + "pHDlBGS2M_IIRncM8BZBe" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 8.952153506039394, + 3.1504148275985675 + ], + [ + 14.985126520979023, + 9.621183179956303 + ], + [ + 23.206631342696312, + 6.918903059645286 + ], + [ + 46.147805044243036, + 7.231044823787492 + ], + [ + 53.30321149362593, + 7.937192638734038 + ], + [ + 58.83770456505607, + 3.5283011626836873 + ], + [ + 66.52487985828556, + -1.8074863408861883 + ], + [ + 68.63317687963549, + 5.5326408894228 + ], + [ + 68.43856484689543, + 12.658011799773933 + ], + [ + 75.47703336432498, + 19.40461514601829 + ], + [ + 78.62326122695475, + 38.718273202909664 + ], + [ + 76.15817547891497, + 58.945787721108715 + ], + [ + 68.98996560632547, + 66.80474279748692 + ], + [ + 59.22692863053606, + 71.01456120685638 + ], + [ + 48.685443523786745, + 73.34043477930085 + ], + [ + 51.47488265972665, + 75.9613681232694 + ], + [ + 54.62111052235638, + 81.77242740610873 + ], + [ + 55.26981729815626, + 99.99982748007206 + ], + [ + 55.14007594299635, + 111.03559144837008 + ], + [ + 51.70193003125663, + 112.94556974496547 + ], + [ + 25.69689715637583, + 113.38697785611421 + ], + [ + 22.445254442678493, + 110.2038008966719 + ], + [ + 21.53706495655864, + 97.22004969101444 + ], + [ + 15.536527280408972, + 98.88791636444891 + ], + [ + 5.611313610669592, + 99.52329414480499 + ], + [ + -3.66519328326976, + 94.20200523432337 + ], + [ + -9.438683587889324, + 84.90960519661658 + ], + [ + -15.049997198558904, + 79.19120517341253 + ], + [ + -21.115405552288543, + 75.16714589782443 + ], + [ + -12.876829499629105, + 75.9613681232694 + ], + [ + -7.038468517429472, + 80.46196073412449 + ], + [ + -0.42165940426998605, + 86.73631631514024 + ], + [ + 7.622304615649531, + 90.65447929400216 + ], + [ + 16.54202278289889, + 89.54256817837927 + ], + [ + 20.953228858338633, + 86.07446446060274 + ], + [ + 21.374888262608568, + 80.62080517921345 + ], + [ + 23.742667994278488, + 75.88194590072499 + ], + [ + 26.82402517932824, + 73.73754589202325 + ], + [ + 15.17973855371898, + 70.74597550951393 + ], + [ + 4.054417348749724, + 67.07717345035687 + ], + [ + -1.621766939499887, + 58.813417350201206 + ], + [ + -5.870796320989606, + 38.90875852124017 + ], + [ + -2.4975210868298436, + 20.180493822847566 + ], + [ + 2.3677797316698683, + 15.04836838716395 + ], + [ + -0.42165940426998605, + 8.08228253641262 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "text", + "version": 504, + "versionNonce": 1699884478, + "isDeleted": false, + "id": "SbiwnK0xhSsvF4H_8m5Y_", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -2728.8863519569904, + "y": -453.3580663115372, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 532, + "height": 126, + "seed": 681127881, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "fontSize": 99.3743832236842, + "fontFamily": 1, + "text": "GitHub App", + "baseline": 88, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "GitHub App" + }, + { + "type": "arrow", + "version": 477, + "versionNonce": 1920931106, + "isDeleted": false, + "id": "GHxDbyfdpGxHQmmPEcVcj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 726.0136146894888, + "y": 1002.8890576728318, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 0, + "seed": 749292871, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 586, + "versionNonce": 1216464382, + "isDeleted": false, + "id": "-mbtq7pN0MxwDt_HDK0d2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1129.0270299203494, + "y": -1256.657443776483, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 1196576425, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 957, + "versionNonce": 1306796258, + "isDeleted": false, + "id": "P0sREojB5Oj-NOo_WFOMr", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1365.3048435390638, + "y": -1156.3588431737062, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 494, + "height": 134, + "seed": 1220414567, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Linux arm", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Linux arm" + }, + { + "type": "rectangle", + "version": 2317, + "versionNonce": 177493566, + "isDeleted": false, + "id": "qAL6e3F8JQZ6Lti3uKDG7", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1225.3576196463546, + "y": -925.9689127762103, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 860131721, + "groupIds": [ + "3gLNSdemMnuzNMjk1AT0C", + "ZYJ4mmazqfVnzujI9uXOn", + "6oU_5_9LZvc3Utex8QvaI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1476, + "versionNonce": 1479652514, + "isDeleted": false, + "id": "PZ53D2HtQZH_Yra10Lyuv", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1277.4479458885562, + "y": -870.2387799755415, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 2116937607, + "groupIds": [ + "x7O6XTS9TCWK9cjOLHRRg", + "ZYJ4mmazqfVnzujI9uXOn", + "6oU_5_9LZvc3Utex8QvaI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1476, + "versionNonce": 1147854462, + "isDeleted": false, + "id": "sLSraJgUMZXLsRA9jqj2Z", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1328.4867458843055, + "y": -837.1039298647265, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 833321065, + "groupIds": [ + "x7O6XTS9TCWK9cjOLHRRg", + "ZYJ4mmazqfVnzujI9uXOn", + "6oU_5_9LZvc3Utex8QvaI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2357, + "versionNonce": 857133154, + "isDeleted": false, + "id": "XicQ8AxBqoA9cYhVeQgpk", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1399.514602908327, + "y": -924.9842740927634, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 724917927, + "groupIds": [ + "5KejDDktAMQ9kkRXoOQvg", + "LamWfJZsUK1YTPvHULws9", + "b8hGRFXJQiBWybDIKMRhc" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1515, + "versionNonce": 1254514366, + "isDeleted": false, + "id": "SDFHxIGdFhmygIUA0DRJf", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1451.6049291505287, + "y": -869.2541412920946, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1414693705, + "groupIds": [ + "Y7nqshArchTKFRe_FJYqi", + "LamWfJZsUK1YTPvHULws9", + "b8hGRFXJQiBWybDIKMRhc" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1515, + "versionNonce": 1919054882, + "isDeleted": false, + "id": "ZSqJSUtg8nu8slpVgdkEP", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1502.643729146278, + "y": -836.1192911812796, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 847311303, + "groupIds": [ + "Y7nqshArchTKFRe_FJYqi", + "LamWfJZsUK1YTPvHULws9", + "b8hGRFXJQiBWybDIKMRhc" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2414, + "versionNonce": 843568894, + "isDeleted": false, + "id": "SkXaBXEIgAsVBkSwFmFW6", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1576.1635685486663, + "y": -922.4358750259671, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1737830953, + "groupIds": [ + "TYz22WiF_oHNc6liPQTdE", + "FLju9xBU8dfHUG6iswURr", + "w3EUgQpWKKhF1-1DsI33j" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1572, + "versionNonce": 1476632546, + "isDeleted": false, + "id": "4YaR6moUNs586YedDWAkY", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1628.2538947908688, + "y": -866.7057422252983, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1831674087, + "groupIds": [ + "rx2yMbcvIuRzswy5GLcYD", + "FLju9xBU8dfHUG6iswURr", + "w3EUgQpWKKhF1-1DsI33j" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1572, + "versionNonce": 1399867198, + "isDeleted": false, + "id": "-BFnOlpma00RaBgPXiOmD", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1679.2926947866172, + "y": -833.5708921144833, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 543098121, + "groupIds": [ + "rx2yMbcvIuRzswy5GLcYD", + "FLju9xBU8dfHUG6iswURr", + "w3EUgQpWKKhF1-1DsI33j" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 1801, + "versionNonce": 269046690, + "isDeleted": false, + "id": "7Ke_r5sKgYUg6z_28r31Q", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1762.909917863889, + "y": -923.0253461450229, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.05422466973346, + "height": 129.05422466973346, + "seed": 1556507655, + "groupIds": [ + "GHhVnktu-93v6LQqC7_Nd", + "TjaFrZnrj66L7g4fNU8pt", + "Ca_Rx5gqneMz7znFmVJVQ", + "z0ATNrI8hQO_cdsyxqha2", + "sB2BoDlCjNsdKpdNgdgTx", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1495, + "versionNonce": 1319153534, + "isDeleted": false, + "id": "d0Et4Mj6b_1a1Q7_5KlEZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1779.1379625218815, + "y": -865.3072950363821, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 170621929, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1550, + "versionNonce": 1822592866, + "isDeleted": false, + "id": "qTYNKCGyJpaXF9Xg-qYqt", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1860.5548312438395, + "y": -865.452915604521, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 491344679, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2167, + "versionNonce": 270143422, + "isDeleted": false, + "id": "7xEhVElU6YHiDrHHJWGsZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1812.8114418272326, + "y": -872.6054575720591, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 889591497, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2241, + "versionNonce": 572412706, + "isDeleted": false, + "id": "ll7XnvZn3HOa0rVE1YjA9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 1.5707963267948957, + "x": 1825.822778632436, + "y": -884.3589152870845, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 388126279, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2271, + "versionNonce": 1409116158, + "isDeleted": false, + "id": "1RzaUEEwNGqQGQfFTuD8Q", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 1837.5906027944957, + "y": -871.4321539509292, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 596268457, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2358, + "versionNonce": 48996066, + "isDeleted": false, + "id": "CD5njwFxka3V3jaNe03DH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 4.71238898038469, + "x": 1824.5972998204952, + "y": -859.6373413438159, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 1898837351, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1769, + "versionNonce": 709605438, + "isDeleted": false, + "id": "oKugyXjHNEp1TBqxAI5z8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1799.254685552216, + "y": -857.229166578567, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 2028189833, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1785, + "versionNonce": 999912098, + "isDeleted": false, + "id": "nfB8Mxk7Avz2QzXpVT-78", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1844.0579113428457, + "y": -856.9855164981127, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1119400071, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1761, + "versionNonce": 2061893758, + "isDeleted": false, + "id": "eufgjCI290TpionRYXOKM", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1787.1162858279367, + "y": -865.2204019301462, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1724759913, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "line", + "version": 1865, + "versionNonce": 248958562, + "isDeleted": false, + "id": "imb95lj_kqKOOsQSNw-_A", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 1786.6132874789546, + "y": -816.2653343915554, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 92211111, + "groupIds": [ + "KWfENJlPuiL9YZulU9yIn", + "4I3nwZ3BbIVrvR2Axq6yN", + "a7RqGwtNwbIHq9QI-ezM2" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "rectangle", + "version": 500, + "versionNonce": 160252094, + "isDeleted": false, + "id": "sYuPasVyYKlqcIkKpAkAY", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 168.84366316430624, + "y": -595.4949778239497, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 1536420425, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 2231, + "versionNonce": 292729378, + "isDeleted": false, + "id": "FesKKWTzeAkohMG2HnbBg", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 265.17425289031144, + "y": -264.8064468236771, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1202551495, + "groupIds": [ + "Lu1K_qtROItXl11gRMio5", + "WkYn9pkJbVIempLUnaMhE", + "z7_DEDNOJOYp5aDu9CrvI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1390, + "versionNonce": 2044885246, + "isDeleted": false, + "id": "h-tj1ZQWL7QzrlXPLbQol", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 317.26457913251306, + "y": -209.0763140230083, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1880209705, + "groupIds": [ + "b5y6PO2uWmSGzOMwYoYpR", + "WkYn9pkJbVIempLUnaMhE", + "z7_DEDNOJOYp5aDu9CrvI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1390, + "versionNonce": 1717312994, + "isDeleted": false, + "id": "oa1AjF27ENnpQjKEFhUI2", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 368.30337912826235, + "y": -175.94146391219329, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 501254631, + "groupIds": [ + "b5y6PO2uWmSGzOMwYoYpR", + "WkYn9pkJbVIempLUnaMhE", + "z7_DEDNOJOYp5aDu9CrvI" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2271, + "versionNonce": 1399236926, + "isDeleted": false, + "id": "Z75KVUhA84otOQ6lfUITw", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 439.33123615228396, + "y": -263.82180814023013, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 364030985, + "groupIds": [ + "KYYPl8YHhyG291qbVk9x4", + "2GHpjGmiinJ_mjdbuSqtC", + "Aqiw9lCGqcDOrhxp1hW7x" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1429, + "versionNonce": 2057441698, + "isDeleted": false, + "id": "vu5GH6GwNO0KOx_qRZJ_E", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 491.4215623944856, + "y": -208.09167533956133, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1428468999, + "groupIds": [ + "ZKJ0DAwLsYMB2ueXPlyCe", + "2GHpjGmiinJ_mjdbuSqtC", + "Aqiw9lCGqcDOrhxp1hW7x" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1429, + "versionNonce": 91935102, + "isDeleted": false, + "id": "svw8WcluNtkqb7Clc5lV8", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 542.4603623902349, + "y": -174.9568252287463, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 74597097, + "groupIds": [ + "ZKJ0DAwLsYMB2ueXPlyCe", + "2GHpjGmiinJ_mjdbuSqtC", + "Aqiw9lCGqcDOrhxp1hW7x" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2328, + "versionNonce": 1098091874, + "isDeleted": false, + "id": "yURV1YlUEjyNQoKyg_1pn", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 615.9802017926231, + "y": -261.27340907343387, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1693875239, + "groupIds": [ + "BBPcxJPN5yaQFr197W1n8", + "47NN2NkccCD3C5sGNKW18", + "Lw51wDBiSa_KKYXuzQLJX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1486, + "versionNonce": 1801449918, + "isDeleted": false, + "id": "QYJF7Cm3lLHLFSi5Z8V56", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 668.0705280348257, + "y": -205.54327627276507, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1759247817, + "groupIds": [ + "xHAUf1YLRq2pqv8UmBr-3", + "47NN2NkccCD3C5sGNKW18", + "Lw51wDBiSa_KKYXuzQLJX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1486, + "versionNonce": 1881116962, + "isDeleted": false, + "id": "f3SAoje7YPgSswRj23ToB", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 719.109328030574, + "y": -172.40842616195005, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 557997895, + "groupIds": [ + "xHAUf1YLRq2pqv8UmBr-3", + "47NN2NkccCD3C5sGNKW18", + "Lw51wDBiSa_KKYXuzQLJX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 1715, + "versionNonce": 1345784318, + "isDeleted": false, + "id": "GXc0Rht77uZjfwndEAXK5", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 802.7265511078458, + "y": -261.8628801924897, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.05422466973346, + "height": 129.05422466973346, + "seed": 1376476329, + "groupIds": [ + "c-L8YW62dX2l_4-w_LmCt", + "qAuD154PwFiX3s5bLT8oq", + "5oCiNPELpESDdiLwpjMd0", + "A07QjiveZt9rE1e1n6zKT", + "n7RK42v8nQ92hk9KZyfpx", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1409, + "versionNonce": 974462178, + "isDeleted": false, + "id": "f5xXU7DcOoNtO7sJ_AHWg", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 818.9545957658383, + "y": -204.1448290838489, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 744808039, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1464, + "versionNonce": 1929452094, + "isDeleted": false, + "id": "rd8xgo309l2LEGE87qMv7", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 900.3714644877964, + "y": -204.29044965198773, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 1605099401, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2081, + "versionNonce": 216215714, + "isDeleted": false, + "id": "v2UKpoAtkVC2Edp4O5fVe", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 852.6280750711894, + "y": -211.44299161952586, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 690649479, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2155, + "versionNonce": 178201214, + "isDeleted": false, + "id": "MR0ehkJfAdoKzuRt57Etw", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 1.5707963267948957, + "x": 865.6394118763928, + "y": -223.1964493345513, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 804849257, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2185, + "versionNonce": 1278790754, + "isDeleted": false, + "id": "6sW-V_A4xruBjhAQ9P4fz", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 877.4072360384525, + "y": -210.26968799839597, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 751808679, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2272, + "versionNonce": 1238508222, + "isDeleted": false, + "id": "yXmvvb4YyvKIt9QpR1W37", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 4.71238898038469, + "x": 864.4139330644521, + "y": -198.4748753912827, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 230576457, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1683, + "versionNonce": 233107490, + "isDeleted": false, + "id": "nm2CZsVMGdIZ9x-2OYUiK", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 839.0713187961728, + "y": -196.0667006260337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1895891911, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1699, + "versionNonce": 1664817918, + "isDeleted": false, + "id": "flnMXwrsUoiTKSfmwgy92", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 883.8745445868026, + "y": -195.82305054557946, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1582776361, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1675, + "versionNonce": 1440127970, + "isDeleted": false, + "id": "AvQ_QyK4d4J1koizbcrFm", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 826.9329190718936, + "y": -204.05793597761294, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1171976935, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "line", + "version": 1779, + "versionNonce": 224070462, + "isDeleted": false, + "id": "fOI9KEwkS225YypNZGXo_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 826.4299207229114, + "y": -155.10286843902213, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1336890121, + "groupIds": [ + "ScFB83G0ondS1guW1JP3S", + "92TimlknlAYOOvadDojbM", + "bvOlYXGhnhR9o-gYG_8cl" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "rectangle", + "version": 568, + "versionNonce": 1377619874, + "isDeleted": false, + "id": "f_jlcVo-qEUPoUTeU58p2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2192.227380670895, + "y": -1306.598740276857, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 1139408391, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 925, + "versionNonce": 110293886, + "isDeleted": false, + "id": "A8QDz0UFE_Zr9x2p0Mfnj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2428.5051942896093, + "y": -1206.7926868302366, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 393, + "height": 134, + "seed": 1178733033, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Runners", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Runners" + }, + { + "type": "rectangle", + "version": 2300, + "versionNonce": 384207714, + "isDeleted": false, + "id": "8vichiL0MQhey4TwuHx2u", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2288.5579703969, + "y": -975.9102092765806, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1042982183, + "groupIds": [ + "b6ODHWkouJjJO-CoqMNNB", + "CVMRvc3R8AcX-6Ii4UF7k", + "XzZx9rmfzNA0gkQPzTh_y" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1458, + "versionNonce": 421778366, + "isDeleted": false, + "id": "6WLWoNqujslq_Hyq0k6j5", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2340.6482966391018, + "y": -920.1800764759155, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 186311881, + "groupIds": [ + "ICCMCxWmB09uL8ixtJFMq", + "CVMRvc3R8AcX-6Ii4UF7k", + "XzZx9rmfzNA0gkQPzTh_y" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1458, + "versionNonce": 1518522146, + "isDeleted": false, + "id": "eo97eLoMvW_tZI3YLHZmM", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2391.687096634851, + "y": -887.0452263650986, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1946773575, + "groupIds": [ + "ICCMCxWmB09uL8ixtJFMq", + "CVMRvc3R8AcX-6Ii4UF7k", + "XzZx9rmfzNA0gkQPzTh_y" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2340, + "versionNonce": 523152382, + "isDeleted": false, + "id": "Q2Gtv2wCYiK3atFaz3zoZ", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2462.7149536588727, + "y": -974.9255705931337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 970285993, + "groupIds": [ + "7L3NB5fyxHtdmRcZQS9Qg", + "WOeX-HLqNtPie-Dgxcj5u", + "J7zn00T6kYp_9oa-M7oK-" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1497, + "versionNonce": 828414690, + "isDeleted": false, + "id": "I9pZb5gdJ3Bw4OJ4gH2cK", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2514.8052799010743, + "y": -919.1954377924685, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 56805223, + "groupIds": [ + "00-NUEPZPNTIZ1qf9Fxe3", + "WOeX-HLqNtPie-Dgxcj5u", + "J7zn00T6kYp_9oa-M7oK-" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1497, + "versionNonce": 112491582, + "isDeleted": false, + "id": "bUninHpGPXQwNddEKmd_b", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2565.8440798968236, + "y": -886.0605876816517, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1855784585, + "groupIds": [ + "00-NUEPZPNTIZ1qf9Fxe3", + "WOeX-HLqNtPie-Dgxcj5u", + "J7zn00T6kYp_9oa-M7oK-" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2397, + "versionNonce": 1242492578, + "isDeleted": false, + "id": "lqY4VFRens-8TkwIj090-", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2639.3639192992123, + "y": -972.377171526341, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 444809863, + "groupIds": [ + "sySb-MYnRZfjvrzAGCo6R", + "xlQ3f5KHPm1UrUXkxEhme", + "KFIc1ISKbBaV39qpJN2y5" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1554, + "versionNonce": 1435911294, + "isDeleted": false, + "id": "GZDQ0akuRBM_MDNx5zOqT", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2691.454245541415, + "y": -916.6470387256686, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 875384169, + "groupIds": [ + "2zJMuczU6oZy0uwsvtGIz", + "xlQ3f5KHPm1UrUXkxEhme", + "KFIc1ISKbBaV39qpJN2y5" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1554, + "versionNonce": 691849826, + "isDeleted": false, + "id": "aQwZIQvT-1mwMybeCx8KH", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2742.4930455371623, + "y": -883.5121886148518, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 1780963751, + "groupIds": [ + "2zJMuczU6oZy0uwsvtGIz", + "xlQ3f5KHPm1UrUXkxEhme", + "KFIc1ISKbBaV39qpJN2y5" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 1784, + "versionNonce": 764740798, + "isDeleted": false, + "id": "N0cKMu3_qM5MOj3HWAmiu", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2826.110268614435, + "y": -972.9666426453969, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.05422466973346, + "height": 129.05422466973346, + "seed": 835827785, + "groupIds": [ + "RKagDoPs9e0Wys7AvQlTk", + "TqmubCs479tRHOnK4vrUs", + "dNvYnM1YXlT4YxuRNPj0r", + "meHBgNYUxpSo4_B2n2phU", + "JajnSxgLeJFcofPVuK6j4", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333960, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1477, + "versionNonce": 1706634786, + "isDeleted": false, + "id": "q5vdWwM1TaC7VXB1gKNpA", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2842.3383132724266, + "y": -915.2485915367561, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 1467714759, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1532, + "versionNonce": 1347534078, + "isDeleted": false, + "id": "67cB6LQzgcvHUQSyucUMR", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2923.7551819943856, + "y": -915.3942121048949, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 426100521, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2149, + "versionNonce": 1685264866, + "isDeleted": false, + "id": "oGP0voOu1NWV4HTeLl0Bh", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2876.0117925777786, + "y": -922.546754072433, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 1847352295, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2223, + "versionNonce": 592276798, + "isDeleted": false, + "id": "OzGzzH5TqcFYqzOeuXHCC", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 1.5707963267948957, + "x": 2889.023129382981, + "y": -934.3002117874548, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 1431632393, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2253, + "versionNonce": 343510434, + "isDeleted": false, + "id": "rCAZhGVvGLhkXfAKdvq-q", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 2900.7909535450417, + "y": -921.3734504513031, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 303449863, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2340, + "versionNonce": 870913406, + "isDeleted": false, + "id": "Dwiq4Nucu30o5zye1b7Ss", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 4.71238898038469, + "x": 2887.7976505710403, + "y": -909.5786378441899, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 1989857513, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1751, + "versionNonce": 721127778, + "isDeleted": false, + "id": "v7JEb9ftRs4hQz4xf-oS3", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2862.455036302762, + "y": -907.1704630789372, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1910885927, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1767, + "versionNonce": 996521406, + "isDeleted": false, + "id": "Yul7us8kUKgEPU76Cg4jD", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2907.2582620933917, + "y": -906.926812998483, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1656933321, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1743, + "versionNonce": 1598557474, + "isDeleted": false, + "id": "R1SVgob23aA1QnOQE_qB8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2850.3166365784828, + "y": -915.1616984305201, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 947351879, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "line", + "version": 1847, + "versionNonce": 585387518, + "isDeleted": false, + "id": "CBvI5ornhRAyOR6GrhYS1", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 2849.8136382295006, + "y": -866.2066308919275, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1105750697, + "groupIds": [ + "Jtc7-yLtSK24M1Dtk7o_2", + "U3bUJ0TFSgBRLITR02mDE", + "CmkVsC3Psvi76jBGN0D6h" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "text", + "version": 889, + "versionNonce": 651040994, + "isDeleted": false, + "id": "GApgyiAL7hdau20EPRY2l", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 177.54007642336455, + "y": -515.2422003187257, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 814, + "height": 134, + "seed": 2133307495, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Linux x64 large", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Linux x64 large" + }, + { + "type": "rectangle", + "version": 573, + "versionNonce": 124116542, + "isDeleted": false, + "id": "cXUaOMvRxPtQCgiYi2GTM", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 194.471040956043, + "y": 58.219578100593935, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 750202249, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 2305, + "versionNonce": 1897704610, + "isDeleted": false, + "id": "prp3AM_hdUW-vhHYONa7j", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 290.8016306820482, + "y": 388.90810910086293, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 2143488903, + "groupIds": [ + "9swU7-qA7quY6tHbBJp6x", + "6k9Zc-KsYBjjDftCax4L2", + "V3aavuDU3WDh31kb6SSop" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1463, + "versionNonce": 1036740222, + "isDeleted": false, + "id": "Z_x3tZfPhkWhCKHr35eHn", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 342.8919569242498, + "y": 444.63824190153537, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 443192425, + "groupIds": [ + "ZmNiYF9E7_-x7odgyXjSG", + "6k9Zc-KsYBjjDftCax4L2", + "V3aavuDU3WDh31kb6SSop" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1463, + "versionNonce": 1675806818, + "isDeleted": false, + "id": "1VCPt5UJ0rzuREFpyrT7E", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 393.9307569199991, + "y": 477.7730920123504, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 109445799, + "groupIds": [ + "ZmNiYF9E7_-x7odgyXjSG", + "6k9Zc-KsYBjjDftCax4L2", + "V3aavuDU3WDh31kb6SSop" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2345, + "versionNonce": 1456858814, + "isDeleted": false, + "id": "PoUjnVHK5ULc5YKHGAdB3", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 464.9586139440207, + "y": 389.8927477843099, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 248389449, + "groupIds": [ + "YANaOrizeDDBFZbb6bFXo", + "TtQhKTljdYFgIHPCq02EY", + "esxK5LjFpsxV9QxDyqRFX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1502, + "versionNonce": 384789538, + "isDeleted": false, + "id": "L1BpbJDE8mhVUG5_RbL55", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 517.0489401862224, + "y": 445.62288058498234, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 605885895, + "groupIds": [ + "nmoBUajNxrT2yP90jhlCA", + "TtQhKTljdYFgIHPCq02EY", + "esxK5LjFpsxV9QxDyqRFX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1502, + "versionNonce": 589717246, + "isDeleted": false, + "id": "1xCHBwnDTEr28ibpGDeNs", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 568.0877401819716, + "y": 478.75773069579736, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 138235433, + "groupIds": [ + "nmoBUajNxrT2yP90jhlCA", + "TtQhKTljdYFgIHPCq02EY", + "esxK5LjFpsxV9QxDyqRFX" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2402, + "versionNonce": 1345427426, + "isDeleted": false, + "id": "bsfwkp_HNi6jHZ1dtQMvm", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 641.6075795843599, + "y": 392.4411468511098, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 530892007, + "groupIds": [ + "UVvWB39F8JUqmpcnABGMu", + "OlG1Hm64EycIKNHmglUtk", + "fExipPnNErgdhfpjARevK" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 1559, + "versionNonce": 926797630, + "isDeleted": false, + "id": "PLH3W4ak15HKf2eGYC8NV", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 693.6979058265624, + "y": 448.17127965177497, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 765698313, + "groupIds": [ + "nDdpbbXlUOuET8VGJpDQj", + "OlG1Hm64EycIKNHmglUtk", + "fExipPnNErgdhfpjARevK" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 1559, + "versionNonce": 1069042594, + "isDeleted": false, + "id": "vCz8bUvapg_9LTnT0YnJg", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 744.7367058223108, + "y": 481.30612976259, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 682201095, + "groupIds": [ + "nDdpbbXlUOuET8VGJpDQj", + "OlG1Hm64EycIKNHmglUtk", + "fExipPnNErgdhfpjARevK" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333961, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 1789, + "versionNonce": 1870477182, + "isDeleted": false, + "id": "_-uFyo7Ap7KibURUNf0AW", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 828.3539288995826, + "y": 391.851675732054, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.05422466973346, + "height": 129.05422466973346, + "seed": 1014798313, + "groupIds": [ + "vcV3MsBe_c20sYTgBVcHV", + "YdtnWEs5KlfFZLCt-hJ6K", + "VFHin-0Z-Yz8YRHpWLm-O", + "VbB9ovd6z3Zgh1-IBN3gz", + "4IF6d9YLHulYV46VXyyxN", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1482, + "versionNonce": 1001555810, + "isDeleted": false, + "id": "9XsJd2-YRrn6BDJh5Ex6G", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 844.5819735575751, + "y": 449.5697268406948, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 1227355943, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1537, + "versionNonce": 1948620734, + "isDeleted": false, + "id": "vwTPy3XI1T6fvApViQFyO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 925.9988422795332, + "y": 449.42410627255595, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.097701154736594, + "height": 16.097701154736594, + "seed": 919843529, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2154, + "versionNonce": 2087668514, + "isDeleted": false, + "id": "aOthldIe3lguYWjfLrnK6", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 878.2554528629262, + "y": 442.2715643050178, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 395082311, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2228, + "versionNonce": 1029173246, + "isDeleted": false, + "id": "Sft67W4NnaqDB070qQ8-b", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 1.5707963267948957, + "x": 891.2667896681296, + "y": 430.51810658998875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 1363440041, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2258, + "versionNonce": 1482528482, + "isDeleted": false, + "id": "_rQU6acPglrML3e6OrhYu", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 903.0346138301893, + "y": 443.4448679261477, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055133, + "height": 29.549397254469028, + "seed": 682858855, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.0423931986251556, + 6.972347246506971 + ], + [ + 4.0521665099182815, + 15.09977569386186 + ], + [ + 2.582101126122359, + 22.99320549938339 + ], + [ + -1.2200231991368504, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 2345, + "versionNonce": 387268670, + "isDeleted": false, + "id": "M6Z-7tgVtYiVaBV429V37", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 4.71238898038469, + "x": 890.0413108561888, + "y": 455.239680533261, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 5.272189709055135, + "height": 29.549397254469028, + "seed": 553276553, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.042393198625157, + 6.972347246506971 + ], + [ + 4.052166509918283, + 15.09977569386186 + ], + [ + 2.5821011261223603, + 22.99320549938339 + ], + [ + -1.220023199136851, + 29.549397254469028 + ] + ] + }, + { + "type": "line", + "version": 1756, + "versionNonce": 813730, + "isDeleted": false, + "id": "t1ePoiS9ARRGzr04lJsqM", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 864.6986965879096, + "y": 457.64785529850633, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 1105843335, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1772, + "versionNonce": 624855166, + "isDeleted": false, + "id": "TT6yQoy_y_7qLGVhmAv0s", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 909.5019223785393, + "y": 457.8915053789606, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 11.58552847456568, + "height": 10.246271570482037, + "seed": 162585449, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 11.53402924765135, + -0.10642859231165952 + ], + [ + 6.4540766663015186, + -5.021875975488723 + ], + [ + 11.58552847456568, + -0.09602030268809739 + ], + [ + 6.018513909760972, + 5.224395594993314 + ] + ] + }, + { + "type": "line", + "version": 1748, + "versionNonce": 975881826, + "isDeleted": false, + "id": "WiAbGZZNvAG9GlB0EljxJ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 852.5602968636304, + "y": 449.65661994693073, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1256958887, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "line", + "version": 1852, + "versionNonce": 1737803966, + "isDeleted": false, + "id": "5BA3vcr4Muk96tgjFiKAK", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 3.141592653589793, + "x": 852.0572985146482, + "y": 498.61168748552154, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 81.99563367263444, + "height": 33.92697695483612, + "seed": 1806927433, + "groupIds": [ + "VBeO1B0K5U8urIML10PI4", + "AsxbBzwfjAP51uSAfCx16", + "UygLxMFWnWQPl6lyfguPH" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 5.076379287981681, + -15.191497858134447 + ], + [ + 16.40139560222033, + -25.977106437843645 + ], + [ + 29.932871603188858, + -32.11238494979527 + ], + [ + 43.51119604430974, + -33.601230358138274 + ], + [ + 58.99548250833466, + -29.811075560335652 + ], + [ + 70.34929816561339, + -21.942143079137395 + ], + [ + 78.47464522980025, + -10.504942290609405 + ], + [ + 81.99563367263444, + 0.3257465966978505 + ] + ] + }, + { + "type": "text", + "version": 995, + "versionNonce": 528984610, + "isDeleted": false, + "id": "N0zkgfodcQ9VLZ4G778g_", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 203.16745421510132, + "y": 138.9649027619762, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 903, + "height": 134, + "seed": 2145754823, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Linux x64 ubuntu", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Linux x64 ubuntu" + }, + { + "type": "rectangle", + "version": 2021, + "versionNonce": 1035534590, + "isDeleted": false, + "id": "mGt5Mg9ZESVETOyIJ1o_N", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1454.2571364341811, + "y": 1145.1726817048948, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.36432904268622, + "height": 129.36432904268622, + "seed": 299750697, + "groupIds": [ + "G0tZz3byJbESWtjsw6YH4", + "R1jqdP72-mDylCMg_R76u", + "xyCPIzPQMGL0WwZigPLx7", + "gmp5HEeBWNog8ZBVd8Bmj" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1802, + "versionNonce": 1460803042, + "isDeleted": false, + "id": "hMYugFC72JO92VvudrLaP", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1481.3160657228955, + "y": 1167.1712826506664, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 77.73215126592353, + "height": 21.37623582977287, + "seed": 1668558311, + "groupIds": [ + "xyCPIzPQMGL0WwZigPLx7", + "gmp5HEeBWNog8ZBVd8Bmj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2420, + "versionNonce": 1798058302, + "isDeleted": false, + "id": "kVfSps_0J2NZlynsiAaLp", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1482.0275134590693, + "y": 1178.8561973276119, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 76.12235688675663, + "height": 80.4772115391467, + "seed": 1604012041, + "groupIds": [ + "xyCPIzPQMGL0WwZigPLx7", + "gmp5HEeBWNog8ZBVd8Bmj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.643443575380352, + 63.89985898598831 + ], + [ + 13.453701915436246, + 75.51223305810007 + ], + [ + 40.448046712817515, + 80.4772115391467 + ], + [ + 64.67589821287176, + 76.3302900087603 + ], + [ + 70.30043105269498, + 63.496974874436326 + ], + [ + 76.12235688675663, + 0.19414715004206573 + ] + ] + }, + { + "type": "ellipse", + "version": 1812, + "versionNonce": 1373178274, + "isDeleted": false, + "id": "2N6p7lHF0HxRb92cbAxuj", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1515.362624539478, + "y": 1199.2554622848147, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 9.338801443761762, + "height": 9.338801443761762, + "seed": 1889786119, + "groupIds": [ + "xyCPIzPQMGL0WwZigPLx7", + "gmp5HEeBWNog8ZBVd8Bmj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2498, + "versionNonce": 458185086, + "isDeleted": false, + "id": "EaR1I865hEfgEodsrbxOY", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1520.3123530900803, + "y": 1204.3699195282425, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 46.20902042086896, + "height": 22.920997757510293, + "seed": 1055350505, + "groupIds": [ + "xyCPIzPQMGL0WwZigPLx7", + "gmp5HEeBWNog8ZBVd8Bmj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.959818742248306, + 14.779540455724831 + ], + [ + 33.80153553185966, + 22.920997757510293 + ], + [ + 45.56652058734014, + 20.16340346746921 + ], + [ + 46.20902042086896, + 11.709055370965237 + ], + [ + 35.705183023821554, + 3.49073418279207 + ] + ] + }, + { + "type": "rectangle", + "version": 1094, + "versionNonce": 118195554, + "isDeleted": false, + "id": "-bYH1ifBdDlHq8BEXuHfB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1182.6760956581684, + "y": 803.6802176917445, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 217128999, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1538, + "versionNonce": 1701018046, + "isDeleted": false, + "id": "yg3LplPWoUsME-BxGOQDJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1217.6961561354956, + "y": 903.381791438569, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 822, + "height": 134, + "seed": 1313708489, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "fontSize": 106.05317217880123, + "fontFamily": 1, + "text": "Syncer linux-arm", + "baseline": 94, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Syncer linux-arm" + }, + { + "type": "rectangle", + "version": 2934, + "versionNonce": 804817186, + "isDeleted": false, + "id": "5CNVw6YnCLsxVrqBlXRMv", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1647.0926129109835, + "y": 1135.2123334463577, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 977830727, + "groupIds": [ + "L-H4Eaa7FUWYPehuhZOys", + "9wIjV70UoM3PExcm2CgpH", + "7ywWuAJTH2iC4wm0moiGo" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2091, + "versionNonce": 1351193086, + "isDeleted": false, + "id": "fPw3tS127kJqiJ3N8Ed00", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1699.182939153185, + "y": 1190.94246624703, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1323923625, + "groupIds": [ + "h-jB7I120KJ1quuFjX3hF", + "9wIjV70UoM3PExcm2CgpH", + "7ywWuAJTH2iC4wm0moiGo" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 2091, + "versionNonce": 68097250, + "isDeleted": false, + "id": "34kAtUr4I7DaBfRcNnwHZ", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1750.2217391489344, + "y": 1224.0773163578451, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 151421543, + "groupIds": [ + "h-jB7I120KJ1quuFjX3hF", + "9wIjV70UoM3PExcm2CgpH", + "7ywWuAJTH2iC4wm0moiGo" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "arrow", + "version": 586, + "versionNonce": 1472373310, + "isDeleted": false, + "id": "OBWYgtHqfc-kRJrev9VIH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1731.5098797229916, + "y": 981.9531511598398, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 0, + "seed": 1382448009, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 2119, + "versionNonce": 1960716450, + "isDeleted": false, + "id": "_gfzncGuXEFG9Yw_fnEMe", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2429.0563001985947, + "y": 1144.6532105511687, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129.36432904268622, + "height": 129.36432904268622, + "seed": 1240964487, + "groupIds": [ + "Bp3a26LZ8aQGj85a6QglK", + "cWFDuMCxE-AyrLJrZ4iZg", + "C6EBP2t_EZG62wENGODlV", + "Urjkz64EQHmZ2bdnHGPKj" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 1899, + "versionNonce": 1844423294, + "isDeleted": false, + "id": "EdxLXuttHwQQJ4gPM3GC0", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2456.115229487309, + "y": 1166.6518114969404, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 77.73215126592353, + "height": 21.37623582977287, + "seed": 687874665, + "groupIds": [ + "C6EBP2t_EZG62wENGODlV", + "Urjkz64EQHmZ2bdnHGPKj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2517, + "versionNonce": 1779745890, + "isDeleted": false, + "id": "eQt1HCO362OebO7ZDZQah", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2456.826677223483, + "y": 1178.3367261738858, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 76.12235688675663, + "height": 80.4772115391467, + "seed": 5788839, + "groupIds": [ + "C6EBP2t_EZG62wENGODlV", + "Urjkz64EQHmZ2bdnHGPKj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.643443575380352, + 63.89985898598831 + ], + [ + 13.453701915436246, + 75.51223305810007 + ], + [ + 40.448046712817515, + 80.4772115391467 + ], + [ + 64.67589821287176, + 76.3302900087603 + ], + [ + 70.30043105269498, + 63.496974874436326 + ], + [ + 76.12235688675663, + 0.19414715004206573 + ] + ] + }, + { + "type": "ellipse", + "version": 1909, + "versionNonce": 30517950, + "isDeleted": false, + "id": "nrm-94hi4Apa-N769gA6e", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2490.1617883038916, + "y": 1198.7359911310887, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 9.338801443761762, + "height": 9.338801443761762, + "seed": 260173129, + "groupIds": [ + "C6EBP2t_EZG62wENGODlV", + "Urjkz64EQHmZ2bdnHGPKj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2595, + "versionNonce": 2105665570, + "isDeleted": false, + "id": "uAuBTlyJurXpd4Mz-3dV_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2495.111516854494, + "y": 1203.8504483745164, + "strokeColor": "#000000", + "backgroundColor": "#000", + "width": 46.20902042086896, + "height": 22.920997757510293, + "seed": 332736455, + "groupIds": [ + "C6EBP2t_EZG62wENGODlV", + "Urjkz64EQHmZ2bdnHGPKj" + ], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.959818742248306, + 14.779540455724831 + ], + [ + 33.80153553185966, + 22.920997757510293 + ], + [ + 45.56652058734014, + 20.16340346746921 + ], + [ + 46.20902042086896, + 11.709055370965237 + ], + [ + 35.705183023821554, + 3.49073418279207 + ] + ] + }, + { + "type": "rectangle", + "version": 1191, + "versionNonce": 34185982, + "isDeleted": false, + "id": "ORxDVCQ-jmfuzfFAvx82R", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2157.475259422582, + "y": 803.1607465380184, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 895.0043993547965, + "height": 574.5410017946701, + "seed": 491215913, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1682, + "versionNonce": 924095458, + "isDeleted": false, + "id": "eop-ffoxIoC9CbQiOjp6y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2192.495319899909, + "y": 902.2735863106227, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 845, + "height": 115, + "seed": 1116378855, + "groupIds": [], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "fontSize": 90.35605258326912, + "fontFamily": 1, + "text": "Syncer windows-x64", + "baseline": 80, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Syncer windows-x64" + }, + { + "type": "rectangle", + "version": 3032, + "versionNonce": 1629000510, + "isDeleted": false, + "id": "iDjovj5krJQrbObGgj_qs", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2621.8917766753975, + "y": 1134.6928622926316, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.35935217859557, + "height": 134.23069043167254, + "seed": 1916530441, + "groupIds": [ + "JzOAmRTUbuH71BehZl-US", + "ycgtsTqPCNC7LKCmJCpTm", + "EJpv8MBKcCwika1WG6KRp" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 2188, + "versionNonce": 1222363042, + "isDeleted": false, + "id": "iHEc6rRx6fy4ST1CHkU17", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2673.982102917599, + "y": 1190.422995093304, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 40.242769241175935, + "height": 56.06265732091207, + "seed": 1392845319, + "groupIds": [ + "NL54pKrRTcwPXUrK5XQch", + "ycgtsTqPCNC7LKCmJCpTm", + "EJpv8MBKcCwika1WG6KRp" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -26.53444674729941, + 53.0799580374892 + ], + [ + -1.079395516271644, + 56.06265732091207 + ], + [ + 13.708322493876526, + 27.473766076028625 + ], + [ + 1.874411811981948, + 1.1755712060450763 + ] + ] + }, + { + "type": "line", + "version": 2188, + "versionNonce": 425687934, + "isDeleted": false, + "id": "3LbhxLeMV8Ag_KyfkOLir", + "fillStyle": "cross-hatch", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2725.0209029133484, + "y": 1223.557845204119, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 72.66822465952413, + "height": 91.711228840396, + "seed": 618341865, + "groupIds": [ + "NL54pKrRTcwPXUrK5XQch", + "ycgtsTqPCNC7LKCmJCpTm", + "EJpv8MBKcCwika1WG6KRp" + ], + "roundness": null, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -31.182074805610032, + -67.57450088649179 + ], + [ + -60.80940479100726, + -68.783421630297 + ], + [ + -62.901771464847585, + -47.94204487631701 + ], + [ + -47.72588609550165, + -45.855614420198 + ], + [ + -16.39643259575279, + 21.723055158513795 + ], + [ + 7.690692714729262, + 22.927807210099 + ], + [ + 9.766453194676531, + 2.0843461100090006 + ], + [ + 7.690692714729263, + 0 + ] + ] + }, + { + "type": "arrow", + "version": 683, + "versionNonce": 1258718050, + "isDeleted": false, + "id": "JT-BeyHqS-lHar8oVt9jo", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2706.3090434874057, + "y": 981.4336800061137, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 0, + "seed": 104941863, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": null, + "updated": 1673023333962, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ] + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/echo.png b/content/posts/2022-12-30-micro-hack-eventbridge/echo.png new file mode 100644 index 00000000..2c85a1d5 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/echo.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/eventbridge.png b/content/posts/2022-12-30-micro-hack-eventbridge/eventbridge.png new file mode 100644 index 00000000..7eb448f0 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/eventbridge.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/github_architecture.png b/content/posts/2022-12-30-micro-hack-eventbridge/github_architecture.png new file mode 100644 index 00000000..97f71d26 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/github_architecture.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/index.md b/content/posts/2022-12-30-micro-hack-eventbridge/index.md new file mode 100644 index 00000000..a8728732 --- /dev/null +++ b/content/posts/2022-12-30-micro-hack-eventbridge/index.md @@ -0,0 +1,396 @@ +--- +slug: '2023/01/06/github-event-aws-eventbridge' +title: 'Micro Hack' +subtitle: 'Hands-on guide to deliver GitHHub events to AWS EventBridge' +date: 2023-01-06 +cover: ./cover.jpeg +coverDescription: 'Street art - Kruisstraat' +coverLink: 'https://goo.gl/maps/rSnimx8mH8NFACDo8' +type: post +comments: true +tags: + - aws + - cloud + - github + - serverless + - eventing + - terraform + - micro hack +authors: + - niek +--- + +_In this post, we explore (POC) how we can deliver GitHub evens to the AWS EventBridge and deliver the events to different targets._ + +

+ +  Source code for this post

+ + +## The context + +With the growing usage of GitHub as well as scaling more self-hosted runners we found a strong need to act more on events sent by GitHub. For the [Self-Hosted runners](https://github.com/philips-labs/terraform-aws-github-runner) we already receiving GitHub events via a webhook. The events are processed by the control plane for scaling the runners. As you can see in the image below events are directly passed from a Lambda to the SQS queue, which makes it hard to use the same event for another independent task. + +![Self-Hosted GitHub runners](runners.png) + +With this runner's solution, we already had the need to process the workflow job evens for monitoring purposes. For example, to calculate the time a job is started after the first event is created, e.g. the job was queued. We introduced a secondary queue to deliver events for analytics. A simple hack but it does immediately not feel right. + +![Self-Hosted GitHub runners monitoring](runners-v2.png) + +The webhook provided by the runner solution is tailored to only accept `workflow_job` events, but we are interested in more events. There are numerous events in which we are interested. Examples are triggering a compliance process when a repository is created, triggering an alarm if even an admin makes a repository public, gather analytics for the lead time of a pull request. Even when we don’t combine a solution, the current solution is not flexible enough to process all kinds of different events with different needs. + +## What's the experiment + +Since GitHub and AWS Cloud are a given, we looking for a better solution to handle the events. And avoiding creating a new webhook, or app for every event we are interested in. We are looking for an event-driven solution to process [GitHub events](https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads). We distinguish to main use cases. A hot stream of events to act on directly, and a cold stream for analytics. AWS typically provides you the building blocks, allowing you to compose the solution in several ways. Let's quickly explore our options: + +- [**Simple Notification Service (SNS)](https://aws.amazon.com/sns/):** A lightweight serverless option. A producer (webhook) publishes messages on a topic and subscribers can receive notification via an HTTP/HTTPS endpoint, email, Kinesis, SQS, Lambda, and SMS. With a filter, a subset of messages can be received. +- [EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html): A lightweight serverless option. A producer can (webhook) can publishes messages on the bus. With rules messages can be delivered to targets. Example targets are Lambda, API endpoints, SQS, SNS, Redshift, and many more. The EventBridge also provides an option to redeliver events based on a message Archive. +- [Kinesis](https://aws.amazon.com/kinesis/): A serverless option for handling continuous streams of data in real-time. Kinesis is based or inspired by Kafka, AWS native, and opinionated. +- [Managed Kafka (MSK)](https://aws.amazon.com/msk/): AA server-based option to handle continuous data streams. Kafka is highly configurable and will support most of the use-cases but also is more expensive and requires more knowledge to manage. + +We are looking for a Serverless approach since we have in general not a constant or equally distributed load. And we have a strong preference for a SaaS-managed service instead to have to manage our own services. With these requirements, the [AWS EventBridge](https://aws.amazon.com/eventbridge/) seems a logical candidate to investigate. + +![AWS EventBridge](eventbridge.png) + +The AWS EventBridge allows you to publish from several sources messages. Based on [rules](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html) messages can be transformed and routed to several [targets](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html) such as SQS, SNS, Lambda, RedShift, Firehose Data Steam, API endpoint, and many more. + +In this POC we quickly explore how hard it is to set up an integration between GitHub and the AWS EventBridge to capture events and deliver the to different targets. For the experiment, we limit ourselves to the following targets. + +1. CloudWatch LogGroup: can we get the integration working? +2. Lambda: Can we trigger custom business logic based on events? +3. Firehose Data Stream: Can we build a Data lake in S3? + +![poc](poc.png) + +As the final step, we will re-play the events sent earlier. + +> ⚠️ Code and Terraform examples are not optimized or hardened ⚠️ + +## Let's do it! + +### Deliver GitHub events to CloudWatch LogGroup + +As mentioned we use Terraform to build [our IaC](https://github.com/npalm/experiment-github-events-aws-eventbridge/blob/a16b3d0810f08afec1e9738d6300221aa6bd0319/main.tf#L6-L13). The first entity we need is the event bus. To be able to replay messages later on we create an event archive as well. + +```hcl +locals { + aws_region = "eu-west-1" + prefix = "blog" +} + +resource "aws_cloudwatch_event_bus" "messenger" { + name = "${local.prefix}-messages" +} + +resource "aws_cloudwatch_event_archive" "messenger" { + name = "${local.prefix}-events-archive" + event_source_arn = aws_cloudwatch_event_bus.messenger.arn +} +``` + +The next question is, how can we deliver events from GitHub to the Event Bus? In GitHub, you can define an App with a webhook and subscribe to events. Events will be delivered to the webhook signed with a secret. Be aware that only events for repositories are sent when the app is installed in that repository. Alternatively, you can create a webhook on the enterprise, organization, or repository level. + +Now we know how we can send events, we need a way to receive them in AWS and put them on the Event Bus. AWS recently [announced](https://aws.amazon.com/about-aws/whats-new/2022/08/amazon-eventbridge-supports-receiving-events-github-stripe-twilio-using-webhooks/) a quick start to deliver GitHub events to the Event Bus. + +![github aws](github_architecture.png) + +The AWS quick start creates a Lambda function with an endpoint that you can configure in GitHub as a webhook. The Lambda checks the signature before delivering the messages to the Event Bus. Amazon provides a [CloudFormation template](https://eventbridge-inbound-webhook-templates-prod-eu-west-1.s3.eu-west-1.amazonaws.com/cfn-templates/github/template.yaml) that deploys a webhook to receive GitHub events and publish them on the bus. This setup through the web console is straightforward. It is not clear how the Lambda function code is maintained. Also, there seems not a way to lock the version of the code, the only way to do this is to maintain the code and CloudFormation template yourself. The provided Lambda does not provide any debug logging or configuration option in case you would change the source. GitHub also does not guarantee a max message size, and the AWS EventBridge only allows messages smaller than 256KB. When you would handle large messages differently, Lambda provides no option. Amazon suggests in those cases to download the Lambda from the console and maintaining it yourself. You can also fetch the Lambda zip from [S3](s3://eventbridge-inbound-webhook-templates-prod-eu-west-1/lambda-templates/github-lambdasrc.zip). + +Since we already build a [webhook](https://github.com/philips-labs/terraform-aws-github-runner/blob/main/modules/webhook/lambdas/webhook/src/webhook/handler.ts) to capture the GitHub events, stripping this function down and delivering the messages to the event bus is fairly simple. For now, we build our own function to keep more control. Later we can still decide to move to the AWS route. A webhook to handle the event in TypeScript looks as below, check the full sources on [GitHub](https://github.com/npalm/experiment-github-events-aws-eventbridge/blob/a16b3d0810f08afec1e9738d6300221aa6bd0319/webhook/lambda/src/webhook/handler.ts). + +```typescript + +export async function handle(headers: IncomingHttpHeaders, body: string): Promise { + const { eventBusName, eventSource } = readEnvironmentVariables(); + + const githubEvent = headers['x-github-event'] as string || 'github-event-lambda'; + let response: Response = { + statusCode: await verifySignature(githubEvent, headers, body), + }; + if (response.statusCode != 200) return response; + + // TODO handle messages larger than 256KB + + const client = new EventBridgeClient({ region: process.env.AWS_REGION }); + const command = new PutEventsCommand({ + Entries: [{ + EventBusName: eventBusName, + Source: eventSource, + DetailType: githubEvent, + Detail: body, + }] + }); + + try { + await client.send(command); + } catch (e) { + logger.error(`Failed to send event to EventBridge`, e); + response.statusCode = 500; + } + + return response; +} +``` + +Next, we deploy the function with a function endpoint, keep in mind this endpoint is open to the world. The signature check validates the message. Creating a Lambda with a function url requires Terraform resources like below. See [here](https://github.com/npalm/experiment-github-events-aws-eventbridge/blob/a16b3d0810f08afec1e9738d6300221aa6bd0319/webhook/main.tf) the full example. + +```hcl + +resource "aws_lambda_function_url" "webhook" { + function_name = aws_lambda_function.webhook.function_name + #qualifier = "${var.prefix}-github-webhook" + authorization_type = "NONE" +} + +resource "aws_lambda_function" "webhook" { + filename = local.lambda_zip + source_code_hash = filebase64sha256(local.lambda_zip) + function_name = "${var.prefix}-github-webhook" + role = aws_iam_role.webhook_lambda.arn + handler = "index.githubWebhook" + runtime = "nodejs18.x" + + environment { + variables = { + EVENT_BUS_NAME = var.event_bus.name + EVENT_SOURCE = "github.com" + PARAMETER_GITHUB_APP_WEBHOOK_SECRET = "SOME_BETTER_SECRET" + } + } +} + +# roles and policies omitted + +``` + +After creating the Terraform resources we can test our webhook. A simple way to test events is by creating a test issue and ensuring your App or webhook is subscribed to events on issues. For the App, you can check the status of events in the advanced section of the App settings. You can redeliver the event here as well, quite handy for testing! + +![issue](issue.png) + +After creating an Issue we should see in AWS that our Lambda is triggered. On the Event Bus, we can’t see the event. The next step is to deliver the event to a target. The first target we define for the test is a CooudWatch Log Group. Just for testing purposes. + +Before events can be delivered to a target, an event rule needs to be created. For now, we forward all events from GitHub to the rule. + +```hcl + +resource "aws_cloudwatch_event_rule" "all" { + name = "${local.prefix}-github-events-all" + description = "Caputure all GitHub events" + event_bus_name = aws_cloudwatch_event_bus.messenger.name + event_pattern = < { + logger.info("Handling event: " + JSON.stringify(event)); +} +``` + +Details for the echo Lambda function are implemented in a module, similar to the webhook discussed earlier. This means we only have to add the modules to our `main.tf`. The [module `echo`](https://github.com/npalm/experiment-github-events-aws-eventbridge/tree/main/echo) is implementing the Lambda function and declares the required Terraform resources. The second module, [`event_rule_target_lambda`](https://github.com/npalm/experiment-github-events-aws-eventbridge/tree/main/event_rule_target_lambda) is similar to the one we created from the log group before. But now tailored to a Lambda target. + +```hcl + +module "echo" { + source = "./echo" + + prefix = local.prefix +} + +module "event_rule_target_lambda" { + source = "./event_rule_target_lambda" + + target = { + arn = module.echo.lambda.arn + name = module.echo.lambda.function_name + } + event_bus_name = aws_cloudwatch_event_bus.messenger.name + event_rule = { + arn = aws_cloudwatch_event_rule.all.arn + name = aws_cloudwatch_event_rule.all.name + } +} +``` + +When you trigger a new event or update the issue created before. The Lambda will be invoked and in the logging of the lambda, the event is printed. Not very useful, but remember we only check the pattern here. + +![lambda echo](echo.png) + +### Build a Data Lake in S3 + +The last target we checking now is Firehose delivery stream. With the Firehose stream, we deliver the message to S3 to mimic a Data Lake. With the following Terraform resources, you create a Firehose delivery stream to S3, configuration is standard. This means that data is cached till 5MB is received or 300 seconds are passed. + +``` +resource "random_uuid" "firehose_stream" {} + +resource "aws_s3_bucket" "firehose_stream" { + bucket = "${local.prefix}-${random_uuid.firehose_stream.result}" + force_destroy = true +} + +resource "aws_s3_bucket_acl" "firehose_stream" { + bucket = aws_s3_bucket.firehose_stream.id + acl = "private" +} + +data "aws_iam_policy_document" "firehose_assume_role_policy" { + statement { + actions = ["sts:AssumeRole"] + + principals { + type = "Service" + identifiers = ["firehose.amazonaws.com"] + } + } +} + +resource "aws_iam_role" "firehose_role" { + name = "${local.prefix}-firehose-role" + assume_role_policy = data.aws_iam_policy_document.firehose_assume_role_policy.json +} + +resource "aws_iam_role_policy" "firehose_s3" { + name = "${local.prefix}-s3" + role = aws_iam_role.firehose_role.name + policy = templatefile("${path.module}/policies/firehose-s3.json", { + s3_bucket_arn = aws_s3_bucket.firehose_stream.arn + }) +} + +resource "aws_kinesis_firehose_delivery_stream" "extended_s3_stream" { + name = "${local.prefix}-stream" + destination = "extended_s3" + + extended_s3_configuration { + role_arn = aws_iam_role.firehose_role.arn + bucket_arn = aws_s3_bucket.firehose_stream.arn + } +} + +``` + +And like before we have created [module](https://github.com/npalm/experiment-github-events-aws-eventbridge/tree/a16b3d0810f08afec1e9738d6300221aa6bd0319/event_rule_target_firehose_s3_stream) to connect the Firehose as the target to the event rule. + +```hcl +module "event_rule_target_firehose_s3_stream" { + source = "./event_rule_target_firehose_s3_stream" + + target = { + arn = aws_kinesis_firehose_delivery_stream.extended_s3_stream.arn + name = aws_kinesis_firehose_delivery_stream.extended_s3_stream.name + } + event_bus_name = aws_cloudwatch_event_bus.messenger.name + event_rule = { + arn = aws_cloudwatch_event_rule.all.arn + name = aws_cloudwatch_event_rule.all.name + } +} +``` + +And to test our Data Lake we have to trigger some events again. After 5 five minutes you should see the first objects appearing in the S3 bucket. + +![s3](s3.png) + +### Replay + +The final question we would like to answer is, can we replay messages. We already have created a message archive. A replay can be initiated via the web console or CLI. In the web console navigate to the EventBus and select Replay. Next set the time windows and source for which you replay messages. After starting the job you should see messages appearing again in your targets. + +![replay](replay.png) + +## Conclusion + +Delivering messages from GitHub to AWS is straightforward with the AWS Eventbridge. As mentioned have some doubts to use the Amazon integration with GitHub today. Since it is not clear how to code is managed. And when not using Terraform you have to extract the webhook code from the CloudFormation template or Lambda. But on the other hand, this is nothing keeping us back. You should make your own judgment here. At this moment we will most likely build an maintain our own Lambda to ensure we can deal properly with cases when the messages exceed the maximum size of 256KB supported by the EventBridge. + +Messages delivered to the EventBridge are forwarded to targets based on rules. In a rule, you specify matching criteria. This can be coarse-grained like we did. We matched the event only based on the source. When there is no EventRule that matches a message, the message ends up in `/dev/null` and you will get no notification that you missed something. This is not a problem, but should be considered and is more or less the opposite of SNS where you get all the messages unless you filter. + +Looking at our current hacky approach, the way we delegate events for monitoring purposes to a second SQS queue, a move to AWS EventBridge seems much more flexible. And avoid tailoring the code. With a move to the AWS EventBridge, our solution could transform as follow. + +![solution](runners-3.png) + +The EventBridge is priced roughly with 1$ per 1 million messages published calculated in blocks of 64KB. Today we handle roughly 1 million messages a month for only the `workflow_job` event. When we start listening for many events this will likely double a few times. Besides that, you have to think about the costs of running the Lambda to handle the events. And finally, you will make costs to process the events. + +Rate limits and quotas should also be considered. The [EventBridge quotas](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html#eb-putevents-limits) for `PutEvents` per region vary from 10.000 per second to 400 per second. The messages posted on the EventBirdge should not exceed 256KB, similar to SQS and SNS. It seems many events in GitHub are relatively small, but for example, the `push` event can be big in case many branches and tags are pushed at once. When you start writing Lamba’s to handle events that require GitHub API calls, you should also think about the [GitHub API rate limits](https://docs.github.com/en/developers/apps/building-github-apps/rate-limits-for-github-apps). Using a personal access token (bad idea) you have a limit of 5000 API calls per hour. For a GitHub App this can be up to 15.000 per hour. + +The AWS EventBridge seems to be a good option to start building a solution to handle GitHub events for building a Data lake as well as acting directly on events. In case you keep your architecture nicely lost coupled you can always move to the Ferrari, Kafka, for Eventing. \ No newline at end of file diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/issue.png b/content/posts/2022-12-30-micro-hack-eventbridge/issue.png new file mode 100644 index 00000000..84179699 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/issue.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/poc.png b/content/posts/2022-12-30-micro-hack-eventbridge/poc.png new file mode 100644 index 00000000..0083e67f Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/poc.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/replay.png b/content/posts/2022-12-30-micro-hack-eventbridge/replay.png new file mode 100644 index 00000000..eb76bdea Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/replay.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/runners-3.png b/content/posts/2022-12-30-micro-hack-eventbridge/runners-3.png new file mode 100644 index 00000000..9b89bb28 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/runners-3.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/runners-v2.png b/content/posts/2022-12-30-micro-hack-eventbridge/runners-v2.png new file mode 100644 index 00000000..041dadc8 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/runners-v2.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/runners.png b/content/posts/2022-12-30-micro-hack-eventbridge/runners.png new file mode 100644 index 00000000..4742fd96 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/runners.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/s3.png b/content/posts/2022-12-30-micro-hack-eventbridge/s3.png new file mode 100644 index 00000000..a3a71579 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/s3.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/workflow copy.png b/content/posts/2022-12-30-micro-hack-eventbridge/workflow copy.png new file mode 100644 index 00000000..ff502bd4 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/workflow copy.png differ diff --git a/content/posts/2022-12-30-micro-hack-eventbridge/workflow.png b/content/posts/2022-12-30-micro-hack-eventbridge/workflow.png new file mode 100644 index 00000000..ff502bd4 Binary files /dev/null and b/content/posts/2022-12-30-micro-hack-eventbridge/workflow.png differ diff --git a/yarn.lock b/yarn.lock index 9c3ada95..af32f4de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8450,9 +8450,9 @@ json-stringify-safe@^5.0.1: integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0"