loader: Fix unknown device trampolines on Windows
authorLenny Komow <lenny@lunarg.com>
Fri, 30 Jun 2017 22:23:26 +0000 (16:23 -0600)
committerLenny Komow <lenny@lunarg.com>
Wed, 5 Jul 2017 21:02:04 +0000 (15:02 -0600)
Change-Id: I33129c1d80d7c1d1615b7b86a7abfae1c33d0204

loader/dev_ext_trampoline.c
loader/phys_dev_chain.c
loader/phys_dev_chain_masm.asm

index e5e1311..55eee0c 100644 (file)
@@ -16,6 +16,7 @@
  * limitations under the License.
  *
  * Author: Jon Ashburn <jon@lunarg.com>
+ * Author: Lenny Komow <lenny@lunarg.com>
  */
 
 #include "vk_loader_platform.h"
 // Clang-format does not understand macros.
 // clang-format off
 
- // Trampoline function macro for unknown physical device extension command.
-#define DevExtTramp(num)                                                       \
-VKAPI_ATTR void VKAPI_CALL vkdev_ext##num(VkDevice device) {                   \
-        const struct loader_dev_dispatch_table *disp;                          \
-        disp = loader_get_dev_dispatch(device);                                \
-        disp->ext_dispatch.dev_ext[num](device);                               \
-    }
-
-#if defined(_WIN32)
-DevExtTramp(0)
-DevExtTramp(1)
-DevExtTramp(2)
-DevExtTramp(3)
-DevExtTramp(4)
-DevExtTramp(5)
-DevExtTramp(6)
-DevExtTramp(7)
-DevExtTramp(8)
-DevExtTramp(9)
-DevExtTramp(10)
-DevExtTramp(11)
-DevExtTramp(12)
-DevExtTramp(13)
-DevExtTramp(14)
-DevExtTramp(15)
-DevExtTramp(16)
-DevExtTramp(17)
-DevExtTramp(18)
-DevExtTramp(19)
-DevExtTramp(20)
-DevExtTramp(21)
-DevExtTramp(22)
-DevExtTramp(23)
-DevExtTramp(24)
-DevExtTramp(25)
-DevExtTramp(26)
-DevExtTramp(27)
-DevExtTramp(28)
-DevExtTramp(29)
-DevExtTramp(30)
-DevExtTramp(31)
-DevExtTramp(32)
-DevExtTramp(33)
-DevExtTramp(34)
-DevExtTramp(35)
-DevExtTramp(36)
-DevExtTramp(37)
-DevExtTramp(38)
-DevExtTramp(39)
-DevExtTramp(40)
-DevExtTramp(41)
-DevExtTramp(42)
-DevExtTramp(43)
-DevExtTramp(44)
-DevExtTramp(45)
-DevExtTramp(46)
-DevExtTramp(47)
-DevExtTramp(48)
-DevExtTramp(49)
-DevExtTramp(50)
-DevExtTramp(51)
-DevExtTramp(52)
-DevExtTramp(53)
-DevExtTramp(54)
-DevExtTramp(55)
-DevExtTramp(56)
-DevExtTramp(57)
-DevExtTramp(58)
-DevExtTramp(59)
-DevExtTramp(60)
-DevExtTramp(61)
-DevExtTramp(62)
-DevExtTramp(63)
-DevExtTramp(64)
-DevExtTramp(65)
-DevExtTramp(66)
-DevExtTramp(67)
-DevExtTramp(68)
-DevExtTramp(69)
-DevExtTramp(70)
-DevExtTramp(71)
-DevExtTramp(72)
-DevExtTramp(73)
-DevExtTramp(74)
-DevExtTramp(75)
-DevExtTramp(76)
-DevExtTramp(77)
-DevExtTramp(78)
-DevExtTramp(79)
-DevExtTramp(80)
-DevExtTramp(81)
-DevExtTramp(82)
-DevExtTramp(83)
-DevExtTramp(84)
-DevExtTramp(85)
-DevExtTramp(86)
-DevExtTramp(87)
-DevExtTramp(88)
-DevExtTramp(89)
-DevExtTramp(90)
-DevExtTramp(91)
-DevExtTramp(92)
-DevExtTramp(93)
-DevExtTramp(94)
-DevExtTramp(95)
-DevExtTramp(96)
-DevExtTramp(97)
-DevExtTramp(98)
-DevExtTramp(99)
-DevExtTramp(100)
-DevExtTramp(101)
-DevExtTramp(102)
-DevExtTramp(103)
-DevExtTramp(104)
-DevExtTramp(105)
-DevExtTramp(106)
-DevExtTramp(107)
-DevExtTramp(108)
-DevExtTramp(109)
-DevExtTramp(110)
-DevExtTramp(111)
-DevExtTramp(112)
-DevExtTramp(113)
-DevExtTramp(114)
-DevExtTramp(115)
-DevExtTramp(116)
-DevExtTramp(117)
-DevExtTramp(118)
-DevExtTramp(119)
-DevExtTramp(120)
-DevExtTramp(121)
-DevExtTramp(122)
-DevExtTramp(123)
-DevExtTramp(124)
-DevExtTramp(125)
-DevExtTramp(126)
-DevExtTramp(127)
-DevExtTramp(128)
-DevExtTramp(129)
-DevExtTramp(130)
-DevExtTramp(131)
-DevExtTramp(132)
-DevExtTramp(133)
-DevExtTramp(134)
-DevExtTramp(135)
-DevExtTramp(136)
-DevExtTramp(137)
-DevExtTramp(138)
-DevExtTramp(139)
-DevExtTramp(140)
-DevExtTramp(141)
-DevExtTramp(142)
-DevExtTramp(143)
-DevExtTramp(144)
-DevExtTramp(145)
-DevExtTramp(146)
-DevExtTramp(147)
-DevExtTramp(148)
-DevExtTramp(149)
-DevExtTramp(150)
-DevExtTramp(151)
-DevExtTramp(152)
-DevExtTramp(153)
-DevExtTramp(154)
-DevExtTramp(155)
-DevExtTramp(156)
-DevExtTramp(157)
-DevExtTramp(158)
-DevExtTramp(159)
-DevExtTramp(160)
-DevExtTramp(161)
-DevExtTramp(162)
-DevExtTramp(163)
-DevExtTramp(164)
-DevExtTramp(165)
-DevExtTramp(166)
-DevExtTramp(167)
-DevExtTramp(168)
-DevExtTramp(169)
-DevExtTramp(170)
-DevExtTramp(171)
-DevExtTramp(172)
-DevExtTramp(173)
-DevExtTramp(174)
-DevExtTramp(175)
-DevExtTramp(176)
-DevExtTramp(177)
-DevExtTramp(178)
-DevExtTramp(179)
-DevExtTramp(180)
-DevExtTramp(181)
-DevExtTramp(182)
-DevExtTramp(183)
-DevExtTramp(184)
-DevExtTramp(185)
-DevExtTramp(186)
-DevExtTramp(187)
-DevExtTramp(188)
-DevExtTramp(189)
-DevExtTramp(190)
-DevExtTramp(191)
-DevExtTramp(192)
-DevExtTramp(193)
-DevExtTramp(194)
-DevExtTramp(195)
-DevExtTramp(196)
-DevExtTramp(197)
-DevExtTramp(198)
-DevExtTramp(199)
-DevExtTramp(200)
-DevExtTramp(201)
-DevExtTramp(202)
-DevExtTramp(203)
-DevExtTramp(204)
-DevExtTramp(205)
-DevExtTramp(206)
-DevExtTramp(207)
-DevExtTramp(208)
-DevExtTramp(209)
-DevExtTramp(210)
-DevExtTramp(211)
-DevExtTramp(212)
-DevExtTramp(213)
-DevExtTramp(214)
-DevExtTramp(215)
-DevExtTramp(216)
-DevExtTramp(217)
-DevExtTramp(218)
-DevExtTramp(219)
-DevExtTramp(220)
-DevExtTramp(221)
-DevExtTramp(222)
-DevExtTramp(223)
-DevExtTramp(224)
-DevExtTramp(225)
-DevExtTramp(226)
-DevExtTramp(227)
-DevExtTramp(228)
-DevExtTramp(229)
-DevExtTramp(230)
-DevExtTramp(231)
-DevExtTramp(232)
-DevExtTramp(233)
-DevExtTramp(234)
-DevExtTramp(235)
-DevExtTramp(236)
-DevExtTramp(237)
-DevExtTramp(238)
-DevExtTramp(239)
-DevExtTramp(240)
-DevExtTramp(241)
-DevExtTramp(242)
-DevExtTramp(243)
-DevExtTramp(244)
-DevExtTramp(245)
-DevExtTramp(246)
-DevExtTramp(247)
-DevExtTramp(248)
-DevExtTramp(249)
-#else
 VKAPI_ATTR void VKAPI_CALL vkdev_ext0(VkDevice device);
 VKAPI_ATTR void VKAPI_CALL vkdev_ext1(VkDevice device);
 VKAPI_ATTR void VKAPI_CALL vkdev_ext2(VkDevice device);
@@ -537,7 +278,6 @@ VKAPI_ATTR void VKAPI_CALL vkdev_ext246(VkDevice device);
 VKAPI_ATTR void VKAPI_CALL vkdev_ext247(VkDevice device);
 VKAPI_ATTR void VKAPI_CALL vkdev_ext248(VkDevice device);
 VKAPI_ATTR void VKAPI_CALL vkdev_ext249(VkDevice device);
-#endif // _WIN32
 
 void *loader_get_dev_ext_trampoline(uint32_t index) {
     switch (index) {
index 3bebf0e..46abc3b 100644 (file)
          icd_term->phys_dev_ext[num](phys_dev_term->phys_dev);                                                         \
     }
 
+// Trampoline function macro for unknown physical device extension command.
+#define DevExtTramp(num)                                                          \
+   VKAPI_ATTR void VKAPI_CALL vkdev_ext##num(VkDevice device) {                   \
+           const struct loader_dev_dispatch_table *disp;                          \
+           disp = loader_get_dev_dispatch(device);                                \
+           disp->ext_dispatch.dev_ext[num](device);                               \
+       }
+
 
 // Instantiations of the trampoline
 PhysDevExtTramp(0)
@@ -556,3 +564,255 @@ PhysDevExtTermin(246)
 PhysDevExtTermin(247)
 PhysDevExtTermin(248)
 PhysDevExtTermin(249)
+
+// Instantiations of the device trampoline
+DevExtTramp(0)
+DevExtTramp(1)
+DevExtTramp(2)
+DevExtTramp(3)
+DevExtTramp(4)
+DevExtTramp(5)
+DevExtTramp(6)
+DevExtTramp(7)
+DevExtTramp(8)
+DevExtTramp(9)
+DevExtTramp(10)
+DevExtTramp(11)
+DevExtTramp(12)
+DevExtTramp(13)
+DevExtTramp(14)
+DevExtTramp(15)
+DevExtTramp(16)
+DevExtTramp(17)
+DevExtTramp(18)
+DevExtTramp(19)
+DevExtTramp(20)
+DevExtTramp(21)
+DevExtTramp(22)
+DevExtTramp(23)
+DevExtTramp(24)
+DevExtTramp(25)
+DevExtTramp(26)
+DevExtTramp(27)
+DevExtTramp(28)
+DevExtTramp(29)
+DevExtTramp(30)
+DevExtTramp(31)
+DevExtTramp(32)
+DevExtTramp(33)
+DevExtTramp(34)
+DevExtTramp(35)
+DevExtTramp(36)
+DevExtTramp(37)
+DevExtTramp(38)
+DevExtTramp(39)
+DevExtTramp(40)
+DevExtTramp(41)
+DevExtTramp(42)
+DevExtTramp(43)
+DevExtTramp(44)
+DevExtTramp(45)
+DevExtTramp(46)
+DevExtTramp(47)
+DevExtTramp(48)
+DevExtTramp(49)
+DevExtTramp(50)
+DevExtTramp(51)
+DevExtTramp(52)
+DevExtTramp(53)
+DevExtTramp(54)
+DevExtTramp(55)
+DevExtTramp(56)
+DevExtTramp(57)
+DevExtTramp(58)
+DevExtTramp(59)
+DevExtTramp(60)
+DevExtTramp(61)
+DevExtTramp(62)
+DevExtTramp(63)
+DevExtTramp(64)
+DevExtTramp(65)
+DevExtTramp(66)
+DevExtTramp(67)
+DevExtTramp(68)
+DevExtTramp(69)
+DevExtTramp(70)
+DevExtTramp(71)
+DevExtTramp(72)
+DevExtTramp(73)
+DevExtTramp(74)
+DevExtTramp(75)
+DevExtTramp(76)
+DevExtTramp(77)
+DevExtTramp(78)
+DevExtTramp(79)
+DevExtTramp(80)
+DevExtTramp(81)
+DevExtTramp(82)
+DevExtTramp(83)
+DevExtTramp(84)
+DevExtTramp(85)
+DevExtTramp(86)
+DevExtTramp(87)
+DevExtTramp(88)
+DevExtTramp(89)
+DevExtTramp(90)
+DevExtTramp(91)
+DevExtTramp(92)
+DevExtTramp(93)
+DevExtTramp(94)
+DevExtTramp(95)
+DevExtTramp(96)
+DevExtTramp(97)
+DevExtTramp(98)
+DevExtTramp(99)
+DevExtTramp(100)
+DevExtTramp(101)
+DevExtTramp(102)
+DevExtTramp(103)
+DevExtTramp(104)
+DevExtTramp(105)
+DevExtTramp(106)
+DevExtTramp(107)
+DevExtTramp(108)
+DevExtTramp(109)
+DevExtTramp(110)
+DevExtTramp(111)
+DevExtTramp(112)
+DevExtTramp(113)
+DevExtTramp(114)
+DevExtTramp(115)
+DevExtTramp(116)
+DevExtTramp(117)
+DevExtTramp(118)
+DevExtTramp(119)
+DevExtTramp(120)
+DevExtTramp(121)
+DevExtTramp(122)
+DevExtTramp(123)
+DevExtTramp(124)
+DevExtTramp(125)
+DevExtTramp(126)
+DevExtTramp(127)
+DevExtTramp(128)
+DevExtTramp(129)
+DevExtTramp(130)
+DevExtTramp(131)
+DevExtTramp(132)
+DevExtTramp(133)
+DevExtTramp(134)
+DevExtTramp(135)
+DevExtTramp(136)
+DevExtTramp(137)
+DevExtTramp(138)
+DevExtTramp(139)
+DevExtTramp(140)
+DevExtTramp(141)
+DevExtTramp(142)
+DevExtTramp(143)
+DevExtTramp(144)
+DevExtTramp(145)
+DevExtTramp(146)
+DevExtTramp(147)
+DevExtTramp(148)
+DevExtTramp(149)
+DevExtTramp(150)
+DevExtTramp(151)
+DevExtTramp(152)
+DevExtTramp(153)
+DevExtTramp(154)
+DevExtTramp(155)
+DevExtTramp(156)
+DevExtTramp(157)
+DevExtTramp(158)
+DevExtTramp(159)
+DevExtTramp(160)
+DevExtTramp(161)
+DevExtTramp(162)
+DevExtTramp(163)
+DevExtTramp(164)
+DevExtTramp(165)
+DevExtTramp(166)
+DevExtTramp(167)
+DevExtTramp(168)
+DevExtTramp(169)
+DevExtTramp(170)
+DevExtTramp(171)
+DevExtTramp(172)
+DevExtTramp(173)
+DevExtTramp(174)
+DevExtTramp(175)
+DevExtTramp(176)
+DevExtTramp(177)
+DevExtTramp(178)
+DevExtTramp(179)
+DevExtTramp(180)
+DevExtTramp(181)
+DevExtTramp(182)
+DevExtTramp(183)
+DevExtTramp(184)
+DevExtTramp(185)
+DevExtTramp(186)
+DevExtTramp(187)
+DevExtTramp(188)
+DevExtTramp(189)
+DevExtTramp(190)
+DevExtTramp(191)
+DevExtTramp(192)
+DevExtTramp(193)
+DevExtTramp(194)
+DevExtTramp(195)
+DevExtTramp(196)
+DevExtTramp(197)
+DevExtTramp(198)
+DevExtTramp(199)
+DevExtTramp(200)
+DevExtTramp(201)
+DevExtTramp(202)
+DevExtTramp(203)
+DevExtTramp(204)
+DevExtTramp(205)
+DevExtTramp(206)
+DevExtTramp(207)
+DevExtTramp(208)
+DevExtTramp(209)
+DevExtTramp(210)
+DevExtTramp(211)
+DevExtTramp(212)
+DevExtTramp(213)
+DevExtTramp(214)
+DevExtTramp(215)
+DevExtTramp(216)
+DevExtTramp(217)
+DevExtTramp(218)
+DevExtTramp(219)
+DevExtTramp(220)
+DevExtTramp(221)
+DevExtTramp(222)
+DevExtTramp(223)
+DevExtTramp(224)
+DevExtTramp(225)
+DevExtTramp(226)
+DevExtTramp(227)
+DevExtTramp(228)
+DevExtTramp(229)
+DevExtTramp(230)
+DevExtTramp(231)
+DevExtTramp(232)
+DevExtTramp(233)
+DevExtTramp(234)
+DevExtTramp(235)
+DevExtTramp(236)
+DevExtTramp(237)
+DevExtTramp(238)
+DevExtTramp(239)
+DevExtTramp(240)
+DevExtTramp(241)
+DevExtTramp(242)
+DevExtTramp(243)
+DevExtTramp(244)
+DevExtTramp(245)
+DevExtTramp(246)
+DevExtTramp(247)
+DevExtTramp(248)
+DevExtTramp(249)
index c9e7240..982e108 100644 (file)
@@ -60,6 +60,13 @@ terminError&num&:
     jmp     rax                                                                 ; Crash intentionally by jumping to address zero
 endm
 
+DevExtTramp macro num
+public vkdev_ext&num&
+vkdev_ext&num&:
+    mov     rax, qword ptr [rcx]                                               ; Dereference the handle to get the dispatch table
+    jmp     qword ptr [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))]  ; Jump to the appropriate call chain
+endm
+
 ; 32-bit values and macro
 ELSE
 
@@ -96,6 +103,13 @@ terminError&num&:
     jmp     eax                                                                 ; Crash intentionally by jumping to address zero
 endm
 
+DevExtTramp macro num
+public _vkdev_ext&num&@4
+_vkdev_ext&num&@4:
+    mov     eax, dword ptr [esp + 4]                                           ; Dereference the handle to get the dispatch table
+    jmp     dword ptr [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))]  ; Jump to the appropriate call chain
+endm
+
 ; This is also needed for 32-bit only
 .model flat
 
@@ -614,4 +628,255 @@ ENDIF
     PhysDevExtTermin 248
     PhysDevExtTermin 249
 
+    DevExtTramp 0
+    DevExtTramp 1
+    DevExtTramp 2
+    DevExtTramp 3
+    DevExtTramp 4
+    DevExtTramp 5
+    DevExtTramp 6
+    DevExtTramp 7
+    DevExtTramp 8
+    DevExtTramp 9
+    DevExtTramp 10
+    DevExtTramp 11
+    DevExtTramp 12
+    DevExtTramp 13
+    DevExtTramp 14
+    DevExtTramp 15
+    DevExtTramp 16
+    DevExtTramp 17
+    DevExtTramp 18
+    DevExtTramp 19
+    DevExtTramp 20
+    DevExtTramp 21
+    DevExtTramp 22
+    DevExtTramp 23
+    DevExtTramp 24
+    DevExtTramp 25
+    DevExtTramp 26
+    DevExtTramp 27
+    DevExtTramp 28
+    DevExtTramp 29
+    DevExtTramp 30
+    DevExtTramp 31
+    DevExtTramp 32
+    DevExtTramp 33
+    DevExtTramp 34
+    DevExtTramp 35
+    DevExtTramp 36
+    DevExtTramp 37
+    DevExtTramp 38
+    DevExtTramp 39
+    DevExtTramp 40
+    DevExtTramp 41
+    DevExtTramp 42
+    DevExtTramp 43
+    DevExtTramp 44
+    DevExtTramp 45
+    DevExtTramp 46
+    DevExtTramp 47
+    DevExtTramp 48
+    DevExtTramp 49
+    DevExtTramp 50
+    DevExtTramp 51
+    DevExtTramp 52
+    DevExtTramp 53
+    DevExtTramp 54
+    DevExtTramp 55
+    DevExtTramp 56
+    DevExtTramp 57
+    DevExtTramp 58
+    DevExtTramp 59
+    DevExtTramp 60
+    DevExtTramp 61
+    DevExtTramp 62
+    DevExtTramp 63
+    DevExtTramp 64
+    DevExtTramp 65
+    DevExtTramp 66
+    DevExtTramp 67
+    DevExtTramp 68
+    DevExtTramp 69
+    DevExtTramp 70
+    DevExtTramp 71
+    DevExtTramp 72
+    DevExtTramp 73
+    DevExtTramp 74
+    DevExtTramp 75
+    DevExtTramp 76
+    DevExtTramp 77
+    DevExtTramp 78
+    DevExtTramp 79
+    DevExtTramp 80
+    DevExtTramp 81
+    DevExtTramp 82
+    DevExtTramp 83
+    DevExtTramp 84
+    DevExtTramp 85
+    DevExtTramp 86
+    DevExtTramp 87
+    DevExtTramp 88
+    DevExtTramp 89
+    DevExtTramp 90
+    DevExtTramp 91
+    DevExtTramp 92
+    DevExtTramp 93
+    DevExtTramp 94
+    DevExtTramp 95
+    DevExtTramp 96
+    DevExtTramp 97
+    DevExtTramp 98
+    DevExtTramp 99
+    DevExtTramp 100
+    DevExtTramp 101
+    DevExtTramp 102
+    DevExtTramp 103
+    DevExtTramp 104
+    DevExtTramp 105
+    DevExtTramp 106
+    DevExtTramp 107
+    DevExtTramp 108
+    DevExtTramp 109
+    DevExtTramp 110
+    DevExtTramp 111
+    DevExtTramp 112
+    DevExtTramp 113
+    DevExtTramp 114
+    DevExtTramp 115
+    DevExtTramp 116
+    DevExtTramp 117
+    DevExtTramp 118
+    DevExtTramp 119
+    DevExtTramp 120
+    DevExtTramp 121
+    DevExtTramp 122
+    DevExtTramp 123
+    DevExtTramp 124
+    DevExtTramp 125
+    DevExtTramp 126
+    DevExtTramp 127
+    DevExtTramp 128
+    DevExtTramp 129
+    DevExtTramp 130
+    DevExtTramp 131
+    DevExtTramp 132
+    DevExtTramp 133
+    DevExtTramp 134
+    DevExtTramp 135
+    DevExtTramp 136
+    DevExtTramp 137
+    DevExtTramp 138
+    DevExtTramp 139
+    DevExtTramp 140
+    DevExtTramp 141
+    DevExtTramp 142
+    DevExtTramp 143
+    DevExtTramp 144
+    DevExtTramp 145
+    DevExtTramp 146
+    DevExtTramp 147
+    DevExtTramp 148
+    DevExtTramp 149
+    DevExtTramp 150
+    DevExtTramp 151
+    DevExtTramp 152
+    DevExtTramp 153
+    DevExtTramp 154
+    DevExtTramp 155
+    DevExtTramp 156
+    DevExtTramp 157
+    DevExtTramp 158
+    DevExtTramp 159
+    DevExtTramp 160
+    DevExtTramp 161
+    DevExtTramp 162
+    DevExtTramp 163
+    DevExtTramp 164
+    DevExtTramp 165
+    DevExtTramp 166
+    DevExtTramp 167
+    DevExtTramp 168
+    DevExtTramp 169
+    DevExtTramp 170
+    DevExtTramp 171
+    DevExtTramp 172
+    DevExtTramp 173
+    DevExtTramp 174
+    DevExtTramp 175
+    DevExtTramp 176
+    DevExtTramp 177
+    DevExtTramp 178
+    DevExtTramp 179
+    DevExtTramp 180
+    DevExtTramp 181
+    DevExtTramp 182
+    DevExtTramp 183
+    DevExtTramp 184
+    DevExtTramp 185
+    DevExtTramp 186
+    DevExtTramp 187
+    DevExtTramp 188
+    DevExtTramp 189
+    DevExtTramp 190
+    DevExtTramp 191
+    DevExtTramp 192
+    DevExtTramp 193
+    DevExtTramp 194
+    DevExtTramp 195
+    DevExtTramp 196
+    DevExtTramp 197
+    DevExtTramp 198
+    DevExtTramp 199
+    DevExtTramp 200
+    DevExtTramp 201
+    DevExtTramp 202
+    DevExtTramp 203
+    DevExtTramp 204
+    DevExtTramp 205
+    DevExtTramp 206
+    DevExtTramp 207
+    DevExtTramp 208
+    DevExtTramp 209
+    DevExtTramp 210
+    DevExtTramp 211
+    DevExtTramp 212
+    DevExtTramp 213
+    DevExtTramp 214
+    DevExtTramp 215
+    DevExtTramp 216
+    DevExtTramp 217
+    DevExtTramp 218
+    DevExtTramp 219
+    DevExtTramp 220
+    DevExtTramp 221
+    DevExtTramp 222
+    DevExtTramp 223
+    DevExtTramp 224
+    DevExtTramp 225
+    DevExtTramp 226
+    DevExtTramp 227
+    DevExtTramp 228
+    DevExtTramp 229
+    DevExtTramp 230
+    DevExtTramp 231
+    DevExtTramp 232
+    DevExtTramp 233
+    DevExtTramp 234
+    DevExtTramp 235
+    DevExtTramp 236
+    DevExtTramp 237
+    DevExtTramp 238
+    DevExtTramp 239
+    DevExtTramp 240
+    DevExtTramp 241
+    DevExtTramp 242
+    DevExtTramp 243
+    DevExtTramp 244
+    DevExtTramp 245
+    DevExtTramp 246
+    DevExtTramp 247
+    DevExtTramp 248
+    DevExtTramp 249
+
 end